fix: fix icmp feature
This commit is contained in:
parent
e8e2953750
commit
2559eaf66c
@ -4,7 +4,7 @@
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<excludeFolder url="file://$MODULE_DIR$/.venv" />
|
||||
</content>
|
||||
<orderEntry type="jdk" jdkName="Python 3.12 (Python-web-communicate)" jdkType="Python SDK" />
|
||||
<orderEntry type="jdk" jdkName="Python 3.13" jdkType="Python SDK" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
30
main.py
30
main.py
@ -6,12 +6,38 @@ import re
|
||||
import time
|
||||
|
||||
|
||||
# 计算校验和
|
||||
def calculate_checksum(data):
|
||||
checksum = 0
|
||||
n = len(data)
|
||||
|
||||
# 按 16 位块划分
|
||||
for i in range(0, n - 1, 2):
|
||||
chunk = (data[i] << 8) + data[i + 1]
|
||||
checksum += chunk
|
||||
|
||||
# 如果长度为奇数,补零
|
||||
if n % 2 == 1:
|
||||
checksum += data[-1] << 8
|
||||
|
||||
# 将 32 位总和折叠为 16 位
|
||||
checksum = (checksum >> 16) + (checksum & 0xFFFF)
|
||||
checksum += (checksum >> 16)
|
||||
|
||||
# 对总和取反
|
||||
return ~checksum & 0xFFFF
|
||||
|
||||
|
||||
# 构造 ICMP 报文
|
||||
def construct_icmp():
|
||||
# ICMP 报文头部: 类型(8), 代码(0), 校验和(0), 标识符(1), 序列号(1)
|
||||
icmp_header = struct.pack('!BBHHH', 8, 0, 0, 1, 1)
|
||||
checksum = ~sum(icmp_header) & 0xFFFF
|
||||
data = b'Ping'
|
||||
# 计算校验和
|
||||
checksum = calculate_checksum(icmp_header + data)
|
||||
# 填充校验和字段
|
||||
icmp_header = struct.pack('!BBHHH', 8, 0, checksum, 1, 1)
|
||||
return icmp_header
|
||||
return icmp_header + data
|
||||
|
||||
|
||||
# 构造 UDP 报文
|
||||
|
Loading…
Reference in New Issue
Block a user