PING_RAW.py 文件源码

python
阅读 33 收藏 0 点赞 0 评论 0

项目:PyQYT 作者: collinsctk 项目源码 文件源码
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)#??????'.'
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号