头歌一次 Ping 过程的原理

该代码段展示了一个Python函数,用于从接收到的数据包中解析ICMP头部,特别是关注类型、代码、校验和、ID以及TTL(生存时间)字段。当类型为0且ID匹配时,函数将返回TTL值,这在实现ping-pong通信或者网络诊断中非常有用。
摘要由CSDN通过智能技术生成

coding: utf-8

import struct

def receiveOnePing(mySocket, ID):
if mySocket is None:
return None

# ********* Begin *********#
# 接收数据,并提取出ICM报文头部,它位于第21到第28个字节
# 解析头部,获取五元组
# 若类型为0,并且五元组zhonghuoqu的ID与输入ID相同,说明成功得到pong报文,这时获取TTL
# TTL位于第9个字节,我们也需要对其进行解析
packet, addr = mySocket.recvfrom(1024)  
header = packet[20: 28]  
type, code, checksum, packetID, sequence = struct.unpack("!bbHHh", header)  
if type == 0 and packetID == ID:    
    ttl = ord(struct.unpack("!c", packet[8:9])[0].decode())  
# ********* End *********#
return type, code, checksum, packetID, sequence, ttl
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值