在没有第三方库的python中以监控模式嗅探以太网数据包?

时间:2014-10-01 06:59:32

标签: python networking sniffing

我能够在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卡在监控模式下,而不是连接到任何网络。我知道我的卡支持Monitor模式,因为它是alfa AWUS066NH。我使用下面的代码将py卡置于监控模式。

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

但是现在,当我运行上面相同的代码时,它在promiscous模式中使用,我只得到一个ethernet_header ('\x00\x00\x12\x00.H', '\x00\x00\x00\x02l\t', '\xc0\x00')看起来像{{1}}

的数据包

为什么我不再看到除了描述的数据包之外的任何数据包?另外我应该如何在监控模式下嗅探?我想在没有第三方的情况下这样做,但如果必须,我会这样做。

2 个答案:

答案 0 :(得分:2)

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

您在0:14字节范围内看到的内容是您的卡预先捕获数据的无线电标题页头的一部分。第三个字节表示无线电标题标题长度为0x12(18字节)。 Radio Tap Headers并不总是0x12,因此802.11数据从第三个字节+ 1的值开始。

答案 1 :(得分:0)

中有一个额外的长度
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