Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 数据包嗅探仅使用原始套接字获取私有IP地址_Python_Networking_Packet_Packet Sniffers_Raw Sockets - Fatal编程技术网

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

Python 数据包嗅探仅使用原始套接字获取私有IP地址,python,networking,packet,packet-sniffers,raw-sockets,Python,Networking,Packet,Packet Sniffers,Raw Sockets,我正在尝试编写一个包嗅探器,用于检测连接到我的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

我正在尝试编写一个包嗅探器,用于检测连接到我的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上进行编码)

您是否使用本地代理来处理web流量?然后,您将看不到数据包中的实际网站地址。如果您没有通过代理,传出的数据包应该有一个私有源地址和公共目的地,传入的backet应该是相反的。@Barmar Hi,不,我没有使用任何类型的代理,我只是连接到我的raspberry pi(数据包嗅探器正在其上运行)使用SSH(使用PuTTY)。RPi是否连接到交换机上的监控端口?如果没有,它将只看到进出RPi的数据包。如果RPi没有连接到Internet,它将看不到任何公共地址。如果它连接到监控端口,则需要将其以太网置于混杂模式,以便接收未发送到它的数据包。