Python Scapy --arp请求和响应

问题描述 投票:0回答:1

我用这行发送一个arp数据包广播:

send(ARP(op=ARP.who_has, psrc="192.168.5.51", pdst=the_ip))

我的问题是:如何查看响应(在这种情况下:远程ip的mac)?我知道我能做到:

pkt = sniff(filter=arp , count=10) 
print (pkt.summary()) 

但是我不想计算数据包,因为我不知道它什么时候打印(可能在接下来的10或100个数据包中)

有没有办法在它嗅探时,打印摘要,从而看到我正在寻找的mac地址?

编辑:我有一个想法,我可以嗅探10个数据包,如果有数据包中的IP打印mac地址,否则嗅10个数据包......这项技术似乎不是一个好的...

python scapy arp
1个回答
2
投票

Scapy's user manual建议使用sr()sr1()函数发送数据包并接收答案:

sr()函数用于发送数据包和接收答案。该函数返回几个数据包和答案,以及未答复的数据包。函数sr1()是一种变体,它只返回一个响应发送的数据包(或数据包集)的数据包。数据包必须是第3层数据包(IP,ARP等)。函数srp()对第2层数据包(以太网,802.3等)执行相同的操作

The official API documentation指定了他们的完整签名。这些似乎是这个用例的相关论据:

retry:如果是肯定的,重新发送未答复的数据包的次数。如果是否定的,在放弃之前有多少连续未答复的探测器。只有负值才真正有用。 timeout:在最后一个数据包发送后等待多长时间。默认情况下,sr将永远等待,当用户不再需要更多答案时,用户必须中断(Ctrl-C)它。 inter:每个数据包发送之间等待的时间(以秒为单位)。

这是一个sr()函数的执行示例:

In [1]: from scapy.all import *
WARNING: No route found for IPv6 destination :: (no default route?)

In [2]: results, unanswered = sr(ARP(op=ARP.who_has, psrc='192.168.1.2', pdst='192.168.1.1'))
Begin emission:
.....*Finished to send 1 packets.

Received 6 packets, got 1 answers, remaining 0 packets

In [3]: results
Out[3]: <Results: TCP:0 UDP:0 ICMP:0 Other:1>

In [4]: result = results[0]

In [5]: result
Out[5]: 
(<ARP  op=who-has psrc=192.168.1.2 pdst=192.168.1.1 |>,
 <ARP  hwtype=0x1 ptype=0x800 hwlen=6 plen=4 op=is-at hwsrc=XX:XX:XX:XX:XX:XX psrc=192.168.1.1 hwdst=XX:XX:XX:XX:XX:XX pdst=192.168.1.2 |>)

In [6]: original_packet, answer = result

In [7]: original_packet
Out[7]: <ARP  op=who-has psrc=192.168.1.2 pdst=192.168.1.1 |>

In [8]: answer
Out[8]: <ARP  hwtype=0x1 ptype=0x800 hwlen=6 plen=4 op=is-at hwsrc=XX:XX:XX:XX:XX:XX psrc=192.168.1.1 hwdst=XX:XX:XX:XX:XX:XX pdst=192.168.1.2 |>

这是一个sr1()函数的执行示例:

In [9]: result = sr1(ARP(op=ARP.who_has, psrc='192.168.1.2', pdst='192.168.1.1'))
Begin emission:
.....Finished to send 1 packets.
*
Received 6 packets, got 1 answers, remaining 0 packets

In [10]: result
Out[10]: <ARP  hwtype=0x1 ptype=0x800 hwlen=6 plen=4 op=is-at hwsrc=XX:XX:XX:XX:XX:XX psrc=192.168.1.1 hwdst=XX:XX:XX:XX:XX:XX pdst=192.168.1.2 |>
© www.soinside.com 2019 - 2024. All rights reserved.