数据包嗅探仅使用原始套接字获取私有IP地址

2024-05-23 21:52:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试编写一个包嗅探器,用于检测连接到我的wifi的设备访问的不同网站。问题是我只获得了私人IP,以下是我从1小时的嗅探中获得的IP数:

IPS                  Number_Of_Values
224.0.0.251          1068
192.168.1.255        387
255.255.255.255      32
224.0.0.22           28
224.0.0.1            28
192.168.1.111        6
192.168.1.115        5
224.0.1.187          2

这是嗅探器的一部分,以太网\u帧获取mac地址和协议,ipv4\u数据包解压IP头并获取IP(源和目标),最后,获取数据包继续进行不同的解压:

def ethernet_frame(data):
    dest_mac, src_mac, proto = struct.unpack('! 6s 6s H', data[:14])
    return get_mac_addr(dest_mac), get_mac_addr(src_mac), socket.htons(proto), data[14:]

def ipv4_packet(data):
    version_header_length = data[0]
    version = version_header_length >> 4
    header_length = (version_header_length & 15) * 4
    ttl, proto, src, target = struct.unpack('! 8x B B 2x 4s 4s', data[:20])
    return version, header_length, ttl, proto, ipv4(src), ipv4(target), data[header_length:]

def get__packets():
    conn = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.ntohs(3))

    while True:
        raw_data, addr = conn.recvfrom(65536)
        dest_mac, src_mac, eth_proto, data = ethernet_frame(raw_data)


        # 8 for ipv4
        if eth_proto == 8:
            (version, header_length, ttl, proto, src_ip, target_ip, data) = ipv4_packet(data)

为什么我只得到私人IP?如何获取网站IP?如果不可能,如何从TCP数据包中获取http头以获取url

(我正在我的raspberry pi 4-Linux上进行编码)


Tags: ipsrcdatagetversionmacdefsocket