繁体   English   中英

在没有第三方库的情况下以python的监听模式嗅探以太网数据包?

[英]Sniffing ethernet packets in monitor mode in python without a third party library?

我可以使用python在混杂模式下嗅探数据包,同时使用以下代码连接到我的无线网络。 我已经对此进行了彻底的测试,并且知道它可以工作。 我在网络上看到正常的数据包:

rawSocket = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.htons(0x0003))
packet = rawSocket.recvfrom(2048)
ethernet_header = packet[0][0:14]
ethernet_detailed = unpack("!6s6s2s", ethernet_header)
print ethernet_detailed

但是,我想更进一步,并在不连接任何网络的情况下,以我的wifi卡在监控模式下尝试此操作。 我知道我的卡支持监控模式,因为它是Alfa AWUS066NH。 我使用以下代码将py卡置于监视模式。

    os.system('ifconfig %s down' % interface)
    os.system('iwconfig %s mode monitor' % interface)
    os.system('ifconfig %s up' % interface)

但是现在,当我运行上面的相同代码时,它在混杂模式下使用,并且我只得到一个ethernet_header像这样的单个数据包('\\x00\\x00\\x12\\x00.H', '\\x00\\x00\\x00\\x02l\\t', '\\xc0\\x00')

为什么我看不到除描述的以外的任何数据包? 另外我应该如何在监听模式下监听? 我想在没有第三方的情况下这样做,但是如果需要的话,我会这样做。

由于您将卡置于监视模式,因此现在正在查看802.11帧(信标,探测请求/响应等)。

您在0:14字节范围内看到的内容是卡在接收到的数据之前的Radio Tap Header的一部分。 第三个字节指示无线电分接头头的长度为0x12(18个字节)。 Radio Tap Headers并非始终为0x12,因此802.11数据从第三个字节+ 1的值开始。

里面有多余的东西

ethernet_header = packet[0][0:14]

这不是必需的

rawSocket = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.htons(0x0003))
packet = rawSocket.recvfrom(2048)
ethernet_header = packet[0:14]
ethernet_detailed = unpack("!6s6s2s", ethernet_header)
print ethernet_detailed

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM