ARP扫描程序

时间:2016-08-13 17:30:30

标签: python python-3.4

#!/usr/bin/python3
#Fazer arping da conexao

import sys
from datetime import datetime
from scapy.all import *

try:
    interface = input ("\n[*] Set interface: ")
    ips = input("[*] Set IP RANGE or Network: ")
except KeyboardInterrupt:
    print("\n user aborted")
    sys.exit()

print("Scanning...")
start_time = datetime.now()

conf.verb = 0

ans,unans = srp(Ether(dst = "ff:ff:ff:ff:ff:ff")/ARP(pdst = ips), timeout = 2, iface = interface ,inter= 0.1)

print("\n\tMAC\t\tIP\n")

for snd,rcv in ans:
    print(rcv.sprintf("%Ether.src% - %ARP.psrc%"))

stop_time = datetime.now()
total_time = stop_time - start_time
print("\n[*] Scan Completed")
print("[*] Scan Duration: %s" %(total_time))

我在互联网上找到了这个代码,我正在努力理解它。 我不明白:

 ans,unans = srp(Ether(dst = "ff:ff:ff:ff:ff:ff")/ARP(pdst = ips), timeout = 2, iface = interface ,inter= 0.1)

为什么有元组ans,unans? 什么是inter= 0.1

for snd,rcv in ans:
        print(rcv.sprintf("%Ether.src% - %ARP.psrc%"))

我不明白rcv.sprintf。这是什么?为什么rcv.sprintf而不是print? 什么是conf.verb = 0

有人可以解释一下吗?

2 个答案:

答案 0 :(得分:4)

关于代码:

 ans,unans = srp(Ether(dst = "ff:ff:ff:ff:ff:ff")/ARP(pdst = ips), timeout = 2, iface = interface ,inter= 0.1)

这段代码的功能非常简单。您使用srp功能发送数据包并接收它们的答案 - 在这种情况下,数据包由协议构建:以太网和ARP。要了解这些协议的功能和用途,必须至少具有一些基本的网络背景。但无论如何,这段代码的作用是询问pdst参数指定的ip来告诉它的mac地址。

在元组ans,unans参数中存储了srp函数的答案。

此外,使用inter参数指定在两个数据包之间等待的时间间隔。

至于rcv.sprintf,我也没有理解它。你可以写一些非常简单的东西:

print rcv[ARP].psrc
print rcv[Ether].src

对于 conf.verb = 0 变量,它的作用是将scapy的详细程度设置为0,这样当您运行时,您不会在终端中获得太多输出程序

答案 1 :(得分:1)

1,为什么有一个元组ans,unans?

答:srp返回answeredunanswered个数据包,因此它是一个元组。srp function

2,什么是inter = 0.1?

答:inter是重新发送未应答数据包的时间间隔,或者在没有应答数据包时重试。 srp函数调用sndrcvinter参数请参阅sndscv function

3,我不明白rcv.sprintf。这是什么?为什么rcv.sprintf而不是print?

A:sprintf输出str,其中format是一个字符串,可以包含directives.A指令开始和 以%结尾,格式为%[fmt[r],][cls[:nb].]field%。细节在这里sprintf function

4,什么是conf.verb = 0?

A:' conf.verb':详细程度,从0(几乎静音)到3(详细)。 verb of Conf Class