首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么原始套接字更改了我的tcp校验和

原始套接字是一种在网络编程中使用的高级技术,它允许开发人员直接访问和操作网络层和传输层的数据包。通过使用原始套接字,开发人员可以自定义网络通信的各个方面,包括修改TCP校验和。

TCP校验和是一种用于检测数据在传输过程中是否发生错误的机制。它通过对数据包中的每个字节进行计算,并将结果添加到数据包的头部。接收方在接收到数据包后,会重新计算校验和,并将结果与数据包头部中的校验和进行比较,以判断数据包是否被修改或损坏。

原始套接字允许开发人员修改TCP校验和,这可能是为了实现某些特定的需求或目的。例如,某些网络安全应用程序可能会使用原始套接字来修改TCP校验和,以实现数据包的伪造或篡改,从而进行网络攻击或欺骗。

然而,需要注意的是,修改TCP校验和可能会导致网络通信的不可靠性和不安全性。TCP校验和的目的是确保数据的完整性和可靠性,如果被恶意地修改,可能会导致数据包被丢弃或被错误地接受。因此,在实际应用中,修改TCP校验和应该谨慎使用,并且需要遵循相关的网络安全规范和法律法规。

总结起来,原始套接字可以修改TCP校验和,但需要注意潜在的安全风险和合规性问题。在实际应用中,应该根据具体需求和情况来决定是否使用原始套接字来修改TCP校验和。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

一道腾讯面试题目:没有listen,能否建立TCP连接

所以对于这个题目,最直接想法就是由应用层自己负责TCP连接。为了能够收到TCP握手数据包,可以尝试使用原始套接来接收IP报文,这样就可以在应用层替代内核做TCP三次握手了。...七年前,当时只知道这个结果。现在呢,可以明确知道为什么内核会发送RST报文,中断连接。...内核在ip_local_deliver_finish先将报文复制一份给原始套接,然后会继续后面的处理,进入tcp接收函数tcp_v4_rcv。在这个函数中,要进行套接查找。 ?...在这个错误处理中,只要数据包skb校验没错,内核就会调用tcp_v4_send_reset发送RST中止这个连接。因此,这个单独使用raw socket方案是行不通。...从截图中,可以看到TCP套接成功“连接”了自己,并发送接收了数据包围。netstat输出证明了TCP两端地址端口是完全相同

1.9K30

JAVA高并发网络编程之TCPUDP协议(八)

开始JAVA高并发网络编程,网络这块先通过TCPUDP基础协议开始学习,慢慢到javasocket编程,nio,netty高性能编程。这次先说说TCPUDP这样协议 ?...应用程序在使用TCP之前,必须先建立TCP连接。 ? ② TCP握手机制 三次握手 ? 为什么是三次握手,而不是两次或者四次握手,知乎上有个形象示例。 三次握手: “喂,你听得到吗?”...② 开发注意点 应用进程容易控制发送什么数据以及何时发送。 无需建立连接。 无连接状态。 首部开销小。 (四)TCPUDP区别 ?...(五)socket编程 Internet中应用最广泛应用编程接口,实现与3种底层协议接口 数据报类型套接SOCK_DGRSM(面对UDP接口) 流式套接SOCK_STREAM (面对TCP接口)...原始套接SOCK_RAM(面向网络层协议接口IP,ICMP等) socket API 及其调用过程 1、创建服务器套接---分配内存、初始化 2、服务器套接--侦听 3、建立与客户端配套客户端套接

88920

CC++ 原生套接抓取FTP数据包

本文将深入介绍基于原始套接网络数据包捕获与分析工具,通过实时监控网络流量,实现抓取流量包内FTP通信数据,并深入了解数据传输细节,捕捉潜在网络问题以及进行安全性分析。...原始套接是一种底层网络编程方式,允许程序直接访问网络协议栈,无需操作系统进行任何处理。在Windows平台,可以通过SOCK_RAW套接类型来创建原始套接。...本文代码示例基于Winsock2库实现,允许我们以最底层方式捕获网络数据包。 Winsock2库与套接初始化 在使用原始套接之前,我们首先需要初始化Winsock2库。...Winsock2提供了在Windows平台上进行套接编程所需函数结构。代码中WSAStartup函数完成了Winsock2库初始化工作。...创建原始套接 使用socket函数创建原始套接,指定协议为IPPROTO_IP,表示接收所有的IP包。

25910

TCP、UDP 协议

各层主要功能 低三层 物理层:使原始数据比特流能在物理介质上传输。 数据链路层:通过校验、确认反馈重发等手段,形成稳定数据链路。(01010101) 网络层:进行路由选择流量控制。...(IP 协议) 承上启下 传输层:提供可靠端口到端口数据传输服务(TCP/UDP 协议) 高三层 会话层:负责建立、管理终止进程之间会话和数据交换。...UDP TCP 比较 TCP UDP 面向连接 无连接 提供可靠保证性 不可靠 慢 快 资源占用多 资源占用少 5....Socket 编程 Internet 中应用最广泛网络应用编程接口,实现于 3 种底层协议接口: 数据报类型套接 SOCK_DGRAM(面向 UDP 接口) 流式套接 SOCK_STREAM...(面向 TCP 接口) 原始套接 SOCK_RAW(面向网络层协议接口 IP、ICMP 等) 主要 Socket API 及其调用过程 Socket API 函数定义 listen()、accept

23520

Java网络编程--网络协议

各层主要功能 物理层:使原始数据比特流能在物理介质上传输 数据链路层:通过校验,确认反馈重发等手段,形成稳定数据链路 网络层:进行路由选择流量控制(IP协议) 传输层:提供可靠端口到端口数据传输服务...(TCP/UDP协议) 会话层:负责建立,管理终止进程之间会话和数据交换 表示层:负责数据格式转换,数据加密和解密,压缩与解压缩等 应用层:为用户应用进程提供网络服务 传输控制协议TCP 传输控制协议...用户数据报协议UDP 用户数据报协议UDP是网络中一个重要传输层协议。提供无连接,不可靠数据报尽力传输服务。由于UDP无需建立连接,首部开销小,协议格式也简洁。 ? TCPUDP比较 ?...Socket编程 Socket编程是网络中应用最广泛网络应用编程接口,实现了三种底层协议接口 数据报类型套接SOCK_DGRAM (面向UDP接口) 流式套接SOCK_STREAM(面向TCP接口...) 原始套接SOCK_RAW(面向网络层协议接口IP,ICMP等) 主要Socket API及其调用过程: ?

1.2K20

accept()返回套接绑定哪个端口 新旧套接联系

这时执行了只关闭监听端口语句,结果却发现监听端口已建立连接仍然存在。都已经关闭了监听套接为什么客户端还可以继续往监听端口发信息?这到底是因为什么呢?新套接监听套接有什么关系呢?...而TCP协议还加入了复杂传输控制,比如滑动数据发送窗口(Slice Window),以及接收确认重发机制,以达到数据可靠传送。...昨天和朋友聊了下网络编程,关于Socket,这里写一下个人一些理解:) 程序里可以创建Socket,分为普通Socket原始Socket两种类型。...这时执行了只关闭监听端口语句,结果却发现监听端口已建立连接仍然存在。都已经关闭了监听套接为什么客户端还可以继续往监听端口发信息?这到底是因为什么呢?新套接监听套接有什么关系呢?...而TCP协议还加入了复杂传输控制,比如滑动数据发送窗口(Slice Window),以及接收确认重发机制,以达到数据可靠传送。

3.6K30

SeedLab——Packet Sniffing and Spoofing Lab

然而,使用原始套接,应用程序可以绕过这些封装,直接访问操作网络协议栈中原始数据。...Q E 使用原始套接时,需要计算IP报文校验吗? 可以不需要。 操作系统中网络协议栈会自动处理IP头部计算填充。...现代操作系统网络协议栈通常会自动计算填充IP头部校验字段。当使用原始套接发送IP数据包时,操作系统会负责处理IP头部构建和校验计算。...我们只需要构造IP数据包内容,将其传递给操作系统,并通过原始套接发送即可。 Q F 为什么原始套接需要root权限?...通过原始套接,可以直接访问操作网络层数据包,包括构造发送自定义网络数据包。所有会存在潜在安全风险,因此必须要root权限。如果没有root权限,在创建原始套接过程就会失败了。

42110

网络嗅探器

原理:   通常套接程序只能响应与自己MAC地址相匹配 或者是 广播形式发出数据帧,对于其他形式数据帧网络接口采取动作是直接丢弃   为了使网卡接收所有经过他封包,要将其设置成混杂模式,通过原始套接来实现...设置混杂模式:   创建原始套接,   绑定到一个明确本地地址,   向套接发送SIO_RCVALL控制命令,   接收所有的IP包 代码实现步骤:   1 创建原始套接   2 绑定到明确地址...主程序代码如下: void main() { //创建原始套接 SOCKET sRaw = socket(AF_INET,SOCK_RAW,IPPROTO_IP); //获取本地...ipChecksum; // 校验 ULONG ipSource; // 源IP地址 ULONG ipDestination; // 目标IP地址...0x40 #define TCP_CWR 0x80 typedef struct _TCPHeader // 20TCP头 { USHORT sourcePort

1.9K100

原始套接 IP_HDRINCL 转

原始套接可以访问ICMPICMP等协议包,可以读写内核不处理IP数据包。可以创建自定义IP数据包首部。一句话,使用原始套接可以   编写基于IP协议通讯程序。   ...1.创建原始套接具体格式如下:int sockfd;sockfd = socktet(AF_INET, SOCK_RAW, IPPROTO_ICMP);第一个参数:协议族 AF_INET 代表TCP/.../n");exit(1);}   原始套接直接使用IP协议套接,所以是非面向连接。在这个套接上可以调用connectbind函数,分别执行绑定对方本地地址。   ...如果将IP数据包标识域设置为0,内核将设置这个域。内核总是计算填充IP数据包首部校验。   注意:IP数据包首部各个域内容都是网络字节顺序。   ...接收数据包   内核遵循以下规则接收数据包:1.UDPTCP数据包从不传送给一个原始套接。如果要查看这两类数据包,只能通过直接访问数据链路层来实现。

2.3K10

golang使用原始套接构造UDP包

RAW SOCKET 介绍 TCP/IP协议中,最常见就是原始(SOCKET_RAW)、tcp(SOCKET_STREAM)、udp(SOCKET_DGRA)三种套接。...原始套接能够对底层传输进行控制,允许自行组装数据包,比如修改本地IP,发送Ping包,进行网络监听。这里不做详细介绍,要了解更多可以网上自己查询。...这里给出校验算法,IP头UDP头中使用校验算法是一样。...,先来看UDP头结构: UDP头结构就很简单了,16位UDP校验涉及到一个UDP伪首部东西,我们先来看下UDP伪首部构成。...结语 这里只给出了UDP实现,TCP实现比较复杂,以后也会给出TCP实现例子。 本文来自:Segmentfault 感谢作者:pinecone 查看原文:golang使用原始套接构造UDP包

3.2K50

SeedLab——TCPIP Attack Lab

C 实现 SYN Flood 使用原始套接来实现伪造IP报文实现一个SYN-Flood攻击程序。 定义TCP报头结构伪报头结构。...TCP伪报头(TCP Pseudo Header)是在进行TCP校验计算时使用辅助数据结构。它不是TCP报文段一部分,而是用于计算校验数据。...AF_INET参数指定了使用IPv4协议,SOCK_RAW参数指定了套接类型为原始套接,IPPROTO_TCP参数指定了传输层协议为TCP。如果socket函数返回值为-1,表示创建套接失败。...// 创建原始套接 int make_raw_socket() { int fd; int on = 1; // 创建一个原始套接 fd = socket(AF_INET...然后使用sendto函数将我们自己构造SYN数据包通过创建原始套接发往目标地址。

37110

原始 socket 编程

原始套接简介 普通 socket 权力原始 socket 权力对比。 1.原始 socket 可以内核一样直接对所有层进行操作(除了物理层)。可以更改 mac 更改 ip 更改端口。...有两种原始套接。另一种是处理数据链路层即其上数据,通过指定socket第一个参数为AF_PACKET来创建这种套接。...type: 这个参数指定一个套接类型,套接口可能类型有:SOCK_STREAM、SOCK_DGRAM、SOCK_SEQPACKET、SOCK_RAW等等,它们分别表明字节流、数据报、有序分组、原始套接口...这个伪首部不是报文真正首部,只是引入为了计算校验。相对于IP协议只计算首部,UDP检验和会把首部和数据一起进行校验。接收端进行校验与UDP报文中校验相与,如果无差错应该全为1。...单位为字节数,这个值是本机期望一次接收字节数。 10.TCP校验字段:占16比特。对整个TCP报文段,即TCP头部TCP数据进行校验计算,并由目标端进行验证 11.紧急指针字段:占16比特。

1.9K20

ss篡权

ss替换netstat原因 ss命令 也是用来显示系统处于活动状态套接信息,但为什么要废弃 netstat 呢?...ss 命令可以用来获取 socket 统计信息,它可以显示 netstat 类似的内容。但ss优势在于它能够显示更多详细有关TCP连接状态信息,而且比netstat更快速更高效。...)信息 -m, --memory 显示套接(socket)内存使用情况 -p, --processes 显示使用套接(socket)进程 -i, --info 显示 TCP内部信息...,QUERY] -D, --diag=FILE 将原始TCP套接(sockets)信息转储到文件 -F, --filter=FILE 从文件中都去过滤器信息 FILTER :.../24 # 列举出处于 FIN-WAIT-1状态源端口为 80或者 443,目标网络为 193.233.7/24所有 tcp套接 # ss netstat 效率对比 time netstat

1K00

【建议收藏】通俗易懂图解网络知识-第二篇

作用与TCP数据段中端口号字段相同,用来标识源端目标端应用进程。 长度字段:占16比特。标明UDP头部UDP数据总长度字节。 校验字段:占16比特。用来对UDP头部UDP数据进行校验。...校验:与UDP中校验字段用法完全相同,它是通过计算整个TCP报文首部、TCP报文数据报以及来自IP报文首部源地址、目的地址、协议和TCP长度字段构成伪首部得来。...关于服务器模式程序设计流程: 套接初始化:用户对套接需求来确定套接选项。 套接与端口绑定:将套接与一个地址结构进行绑定。...当服务器处理完数据,要结束与客户端通信过程时候,需要关闭套接连接。...当服务端收到客户端FIN数据包后(第一次挥手),服务端不会立即close,为什么不立即close,因为可能数据还没有发完,服务端会先将ACK发送告诉客户端收到你断开请求(第二次挥手),请给我一点时间

1.3K10

windows环境下用c++实现socket编程

一、什么是Socket     socket即套接,用于描述地址端口,是一个通信链句柄。应用程序通过socket向网络发出请求或者回应。     ...sockets(套接)编程有三种,流式套接(SOCK_STREAM),数据报套接(SOCK_DGRAM),原始套接(SOCK_RAW);前两种较常用。...基于TCPsocket编程是采用流式套接。     (1)SOCK_STREAM表示面向连接数据传输方式。数据可以准确无误地到达另一台计算机,如果损坏或丢失,可以重新发送,但效率相对较慢。...三、编程步骤     (1)服务端         1、加载套接字库,创建套接(WSAStartup()/socket());         2、绑定套接到一个IP地址一个端口上(bind())...5、用返回套接客户端进行通信(send()/recv());         6、返回,等待另一个连接请求;         7、关闭套接,关闭加载套接字库(closesocket()/WSACleanup

2.7K10

Python3实现ICMP远控后门(上)

ICMP后门 前言 这几天一直在研究远控木马一些通信协议,比如TCP,UDP,ICMP,DNS,HTTP等等,对于TCP,UDP这两种就不讲解了,因为太常见了。...本次就以ICMP协议进行分析,并使用Python开发出一个ICMP远控后门,在写这篇文章之前,感觉大家对ICMP协议肯定不会很了解,因此将ICMP后门实现分成几篇进行讲解,循序渐进。...对于ICMP首部细分为8位类型+8位代码+16位校验+16位标识符+16位序列号,其中类型取值如下,我们比较关注是请求(取值为8)应答(取值为0)。 ?...第三节 ping实现 在上面我们简单讲解了ICMP报文格式,接下来我们使用Python3根据报文格式简单实现一下ping功能,主要用到了raw socket技术,即原始套接,使用struct pack...原始套接初始化,使用如下代码: socket.socket(socket.AF_INET,socket.SOCK_RAW, socket.getprotobyname('icmp')) 里面比较复杂是计算校验

1.2K30

【Java核心面试宝典】Day21、面试官:如果你访问一个网站很慢,怎么排查和解决?

Hello,你好呀,是灰小猿!一个超会写bug程序猿! 用坚持缔造技术、用指尖敲动未来! 很多小伙伴们一样,也是一名奔波在Java道路上“创造者”。也想靠技术来改未来,改变世界!...在计算机网络应用层你了解多少,是否知道socket套接有哪些?知道你网站为什么访问慢吗?知道为什么fidder、Charles能抓到你包吗?今天我们就来一一揭秘!...TCP连接端点,这个端点就是套接。...套接主要有以下三种类型: 流套接(SOCK_STREAM): 流套接基于TCP传输协议, 主要用于面向连接、可靠数据传输服务,由于TCP协议特点,使用流套接进行通信时能够保证数据无差错、...原始套接(SOCK_RAW): 由于流套接和数据报套接只能抓取TCPUDP协议数据,当需要处理非传输层数据包或操作系统无法处理数据包时,就需要使用原始套接来发送。

73420

经常打游戏、刷视频,却不了解它们底层通信机制吗?来给你聊清楚Python Socket通信原理

我们将用这个 socket 对象客户端进行通信。 ---- 客户端方面:申请连接 connect((HOST, PORT)) 参数不用再释义了吧。返回一个通信套接。...---- 公共用途套接函数 s.recv() # 接收 TCP 数据,数据以字符串形式返回,bufsize 指定要接收最大数据量。flag 提供有关消息其他信息,通常可以忽略。...s.send() # 发送 TCP 数据,将 string 中数据发送到连接套接。返回值是要发送字节数量,该数量可能小于 string 字节大小。...---- 服务端/客户端,放码过来 先打个样儿,后来人可以直接拿去修改了自己用: 服务端 import socket # create a socket object serversocket =...这是一种场景,不过场景是处理多连接,大并发

76120

《网络是怎么样连接》读书笔记 - WEB服务端请求和响应(五)

接下来协议栈会给等待连接套接复制一个副本, 然后将连接对象等控制信息写入新套接中,为什么这里要创建副本简单解释一下,因为如果直接使用原有的套接连接,那么当新客户端请求过来,就必须要再次创建新套接然后再次进行连接...使用复制套接方式,原有的套接依然可以完成等待连接工作,新建套接副本是没有关联。...针对这个问题,服务端套接除了确定端口之外,还需要带上IP信息客户端端口号信息,最终依靠下面四个变量来确定哪一个套接交互。...为什么还要使用描述符呢?这里回顾一下描述符内容,描述符指的是在创建套接之后,服务端需要返回给客户端一条标识信息,目的是告知客户端自己是谁,协议栈也需要返回描述符用于标识是哪一个套接在进行传数据。...对上套接之后,TCP 模块会对比该套接中保存数据收发状态收到 TCP 头部中信息是否匹配,比如检查收到包序号是否匹配等,如果数据确认无误,将会生成对应应答头部并且计算ACK号码,然后自己再生成一个序号返回给客户端

61410
领券