用于Noobs的Python包嗅探器和套接字

2024-05-23 17:24:57 发布

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

所以我有一些关于套接字和嗅探器编程的问题。。。 我刚刚开始编程,有一个项目,我想使用通过我的网络发送的信息。在

我试着在youtube上看了几段关于这个过程的视频,并试图找到更好的素材来进一步研究,但我没有找到一个对我有意义的来源。在

我所包含的代码来自youtube上的一段视频,当他们解释的时候似乎有道理,但我猜他可能是在使用Linux或者其他什么东西,因为Windows不支持AF_包。经过一些研究,我发现人们使用的是AF_INET,但我得到了一个错误:

OSError:[WinError 10043]请求的协议尚未配置到系统中,或者不存在该协议的实现

有没有什么地方或方法可以让别人给我解释一下插座?我不打算在这个项目的最终版本中使用windows,而且我还计划在将来为蓝牙修改它,所以如果我能找到一种方法,我想学习背后的推理。在

在` 导入套接字 导入结构 导入文本换行

def main():
    conn = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.ntohs(3))
        while True:
        raw_data, addr = conn.recvfrom(65535)
        dest_mac, src_mac, eth_proto, data = ethernet_frame(raw_data)
        print('\nEthernet Frame:')
        print('Destination: {}, Source: {}, Protocol: {}'.format(dest_mac, src_mac, eth_proto, data[:14]))


#unpack ethernet frame
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:]

#Get Mac Address
def get_mac_addr(bytes_addr):
    bytes_str = map('{:02x}'.format, bytes_addr)
    return ':'.join(bytes_str).upper()

main()

`


Tags: 项目srcdatagetbytesmacdef编程
1条回答
网友
1楼 · 发布于 2024-05-23 17:24:57

使用套接字进行数据包嗅探的操作系统有:

  1. Linux系统
  2. 铱星

Windows不在该列表中(名称中带有“BSD”、OS X、Solaris、HP-UX、AIX等也不在其中)。Linux和Irix都碰巧使用套接字进行嗅探,但这只是他们的选择(它们没有选择相同的类型的套接字,它们只是碰巧选择了套接字)。在

如果您想编写一个嗅探器,那么最好使用libpcap/WinPcap的包装器,让它们处理在特定操作系统上执行包嗅探的痛苦细节。Python的包装器包括pylibpcappcapy;我不知道它们是否都能在Windows上使用WinPcap。在

(请注意,您不能保证在已嗅探的数据包上获取以太网头;您应该调用pcap_datalink(),或者任何与包装器等效的东西,并检查其返回值-如果不是{},或者包装器的等效值,则不会获得以太网报头。)

AF_INET原始套接字,在任何平台上,都不会提供以太网报头。我不知道协议参数3-3是GGP的互联网协议号,据我所知,这个协议是古老的,而且据我所知,你可能会得到一个套接字,在这个套接字上你可以发送GGP包,从中你可以接收GGP包,不管值多少钱很多)。(另外,C中的socket()调用的参数是按主机字节顺序排列的,Python的工作原理可能是一样的,所以您可能不想让socket.ntohs()出现在那里,而不是因为它会有什么不同。)

相关问题 更多 >