IP包头分析

IP包头

选择自己的网卡,开始抓包

ping一个字节大点的数据,方便查看包

选择数据包,并过滤icmp协议

查看抓到的包,分析

IP包头范围:20-60

首部长度:定义包头的长度

总长度:表示当前数据的长度

MAC地址

IP包头

icmp

数据

fcs

完整的桢

1

14

20

8

1472

4

1518

2

14

20

0

1480

4

1518

3

14

20

0

548

4

586

TTL:生存时间,范围为1-255

Windows一般为128

linux一般为1-128之间

协议为ICMP

协议号有:6--TCP、17--UDP、1--ICMP

校验和:检查包头是否完整,不检验数据

### IP网络传输中的包头结构与字段分析 #### 包头基本结构概述 IP数据报头部用于指导互联网层的数据转发。版本号、首部长度和服务类型共同占用2字节,其中前4位表示版本号,后4位指示头部长度,单位为4字节[^4]。 #### 数据总长字段解析 紧接着的是2字节的数据总长字段,该字段记录整个IP数据报的大小,包括头部和负载部分,最大可达65535字节。 #### 信息字段说明 随后的信息字段占据8字节空间,这些字段包含了诸如标识符、标志以及片偏移等重要参数,它们对于分片重组至关重要。 #### 地址字段描述 源端IP地址和目标端IP地址各占4字节,在IPv4环境中分别指定发送方和接收方的身份识别信息。这使得路由器能够依据目的地来路由选择路径并最终送达给正确的终端设备[^1]。 #### 可选字段特性 最后是0到40字节不固定的可选项区域,这部分可以为空也可以携带额外的功能指令或测试用途的内容,并通过填充确保整体长度符合规定标准。 ```python # Python代码示例展示如何构建一个简单的IP包头(仅作示意) class IPPacketHeader: def __init__(self, version=4, header_length=5, total_length=20, identification=0x123, flags_and_offset=0b0100_0000_0000_0000, ttl=64, protocol=6, checksum=0, source_ip="192.168.1.1", destination_ip="192.168.1.104"): self.version = version # 占用高4位 self.header_length = header_length # 占用低4位 self.total_length = total_length # 总长度(字节数) self.identification = identification # 标识符 self.flags_and_offset = flags_and_offset # 标志位+片段偏移量 self.ttl = ttl # 生存时间(TTL) self.protocol = protocol # 上层协议编号 (TCP:6 UDP:17 ICMP:1) self.checksum = checksum # 头校验和 self.source_ip = source_ip # 源IP地址 self.destination_ip = destination_ip # 目标IP地址 def to_bytes(self): import struct return struct.pack('!BBHHHBBHII', (self.version << 4) | self.header_length, 0, # DSCP + ECN 字段设为默认值 self.total_length, self.identification, self.flags_and_offset, self.ttl, self.protocol, self.checksum, int.from_bytes(socket.inet_aton(self.source_ip), 'big'), int.from_bytes(socket.inet_aton(self.destination_ip), 'big')) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值