感谢您花时间看看这个!Python:线程ARP ping的奇怪输出
我遇到的问题是我的线程ARP脚本的输出。我试图实现的是将每个活动主机输出的IP地址,MAC地址和NIC供应商都命令提示符。
我有一个老的ARP脚本没有线程,这需要大约90秒,并打印我的理想输出。
下面是我的新脚本,基于上述脚本,使用线程。不幸的是,我不知道为什么输出中没有显示值。如果有人能帮助我,我将非常感激!
提前致谢!
def arp2(ip):
# An ARP scanner for the network.
ips = []
global ans, unans
ans, unans = srp(Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(pdst=ip), timeout=2, verbose=0)
for snd, rcv in ans:
#Assign MAC address and IP address to variables mac and ipaddr
mac = rcv.sprintf(r"%Ether.src%")
ipaddr = rcv.sprintf(r"%ARP.psrc%")
#Get NIC vendor code from MAC address
niccode = mac[:8]
niccode = niccode.upper()
print ips
ips.append("end")
#ARPips file amendments
with open('C:\Python26\ARPips.prn', 'w+') as f:
f.write("\n".join(map(lambda x: str(x), ips)) + "\n")
#String lookup for NIC vendors. DO NOT CHANGE 'r' TO ANY OTHER VALUE.
with open('C:\Users\TomVB\Desktop\OID2.prn', 'r') as file:
for line in file:
if niccode in file:
return mac, ipaddr, line[8:]
def main():
print "Discovering..."
print ""
print "MAC Address \t \t IP Address \t NIC Vendor"
pool = Pool(processes=12)
Subnetlist = []
for i in range(255):
Subnetlist.append(str(IPInt+str(i)))
global ARPresults
ARPresults = pool.map(arp2, Subnetlist)
pool.close()
pool.join()
print "\n".join(ARPresults)
if __name__ == '__main__':
main()
这个剧本给了我下面的输出:
Mac Address IP address NIC Vendor
[][]
[]
[]
[]
[]
[][]
[]
[]
等这样的周边的200线。
[重读我的回答你刚才的问题。这个问题是类似的](http://stackoverflow.com/q/22330003/4279) – jfs
嘿@ J.F.Sebastian,感谢您看到这个,我想这个时候我写了这个脚本。你知道为什么它没有打印,即使mac和ipaddr被返回,地图选择它们吗?我觉得我错过了一些非常明显的东西): –
上一个问题中的第一个问题:'ping()'不会返回任何内容,但是您正尝试打印其结果。 'arp2()'返回什么? – jfs