展开全部
程序处理上有些问题,建议深入研究一下ICMP协议。下面是Python 3的一个ICMP的简单实现,可以参考一下。32313133353236313431303231363533e78988e69d8331333361306438
import socket
import struct
def checksum(source_string):
sum = 0
countTo = (len(source_string)/2)*2
count = 0
while count
thisVal = ord(source_string[count + 1:count + 2])*256 + ord(source_string[count:count + 1])
sum = sum + thisVal
sum = sum & 0xffffffff
count = count + 2
if countTo
sum = sum + ord(source_string[len(source_string) - 1])
sum = sum & 0xffffffff
sum = (sum >> 16) + (sum & 0xffff)
sum = sum + (sum >> 16)
answer = ~sum
answer = answer & 0xffff
answer = answer >> 8 | (answer <
return answer
def ping(ip):
rawsocket1=socket.socket(socket.AF_INET,socket.SOCK_RAW, socket.getprotobyname('icmp'))
packet = struct.pack('!BBHHH8s', 8, 0, 0, 0, 0, b'abcdefgh')
chksum=checksum(packet)
packet = struct.pack('!BBHHH8s', 8, 0, chksum, 0, 0, b'abcdefgh')
rawsocket1.sendto(packet, (ip, 1))
ping('10.172.23.254')