def ping_one_raw(dst,seq_no):
send_time = time.time() #????1462346467.457762
time_in_bytes = struct.pack('d',send_time)
#?????2???d?8?????????????????????????????????????
my_checksum = 0
header = struct.pack('bbHHH', 8, 0, my_checksum, (os.getpid() & 0xffff), int(seq_no))#?????0????????
#??????????????????????????????????
payload = struct.pack('18s', b'welcome to qytang!')#?????????????
#??????????????????????????????????
my_checksum = do_checksum(header + time_in_bytes + payload)#???????????????????
#??????????????????????????????????
icmp_id = (os.getpid() & 0xffff)#????ID???ICMP ECHO?ID
header = struct.pack('bbHHH', 8, 0, int(my_checksum), icmp_id, int(seq_no))#?????????????????ICMP??
packet = header + time_in_bytes + payload#???????????????????????
sock = socket.socket(socket.AF_INET, socket.SOCK_RAW, 1)#??socket???1??icmp??
sock.sendto(packet, (dst, 1))#??ICMP????????????socket???????????????????
recv_packet, addr = sock.recvfrom(1024)#?????
receive_time = time.time()#???????????
header = struct.unpack('bbHHH',recv_packet[20:28])#??ICMP???
if header[3] == icmp_id and header[4] == seq_no:#??ICMP ID????????
echo_request_sendtime = struct.unpack('d',recv_packet[28:36])#?????
time_to_pass_ms = (receive_time - echo_request_sendtime[0]) * 1000#???????????
print('Echo Reply Received time=%4.2f ms' % time_to_pass_ms)#????
else:
print('.', flush=True)#??????'.'
评论列表
文章目录