fix: fix icmp feature
This commit is contained in:
parent
e8e2953750
commit
2559eaf66c
@ -4,7 +4,7 @@
|
|||||||
<content url="file://$MODULE_DIR$">
|
<content url="file://$MODULE_DIR$">
|
||||||
<excludeFolder url="file://$MODULE_DIR$/.venv" />
|
<excludeFolder url="file://$MODULE_DIR$/.venv" />
|
||||||
</content>
|
</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" />
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
</component>
|
</component>
|
||||||
</module>
|
</module>
|
30
main.py
30
main.py
@ -6,12 +6,38 @@ import re
|
|||||||
import time
|
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 报文
|
# 构造 ICMP 报文
|
||||||
def construct_icmp():
|
def construct_icmp():
|
||||||
|
# ICMP 报文头部: 类型(8), 代码(0), 校验和(0), 标识符(1), 序列号(1)
|
||||||
icmp_header = struct.pack('!BBHHH', 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)
|
icmp_header = struct.pack('!BBHHH', 8, 0, checksum, 1, 1)
|
||||||
return icmp_header
|
return icmp_header + data
|
||||||
|
|
||||||
|
|
||||||
# 构造 UDP 报文
|
# 构造 UDP 报文
|
||||||
|
Loading…
Reference in New Issue
Block a user