#!/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
for snd,rcv in ans:
        print(rcv.sprintf("%Ether.src% - %ARP.psrc%"))

我不明白。这是什么?为什么是rcv.sprintf而不是print?
什么是inter= 0.1
有人能解释一下吗?

最佳答案

关于代码:

 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地址。
在tupleans,unans参数中存储了srp函数的答案。
另外,使用inter参数可以指定两个数据包之间等待的时间间隔。
至于rcv.sprintf我也不明白你可以写一些非常简单的东西,比如:
print rcv[ARP].psrc
print rcv[Ether].src

至于conf.verb=0变量,它所做的是将scapy的verbosity设置为0,以便在运行程序时不会在终端中获得太多输出。

关于python - ARP扫描程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38935304/

10-12 19:14