如何使用scapy和netinfo创建一个脚本来捕获数据包?

2024-05-19 01:44:15 发布

您现在位置:Python中文网/ 问答频道 /正文

为我糟糕的英语感到抱歉。也许问题已经解决了,但不幸的是,我并没有找到解决问题的办法。 总的来说,任务有问题。有人能帮我吗? 使用scapy和netinfo,我需要创建一个功能,在系统的默认网络接口之外向“8.8.8.8”主机发送ping请求(类似于“ethX”,其中X是数字),并验证请求是否已经被 通过捕获传出数据包发送。在

通过这一步,我部分地理解了:

#!/usr/bin/python

import sys 
from scapy.all import *
import netinfo
class test: 
    host = "8.8.8.8" 

    def pingh(self): 
        self.host 
        pkt = Ether()/IP(dst=self.host,ttl=(1,3))/ICMP() 
        ans,unans = srp(pkt,iface="eth0",timeout=2) 
        ans.summary(lambda (s,r): r.sprintf("%Ether.src% %IP.src%") ) 

r = test()
print "request from ping " 
r.pingh() 

但下一步我被卡住了:

同时对'lo'和'ethX'接口执行相同的操作(使用标准的“线程”模块)。 应将捕获的结果收集到字典中,字典结构如下: {'iface1':列出捕获的包的列表,'iface2':列出捕获的包的列表。此字典的修改应该是线程安全的。通过添加一个测试来修改测试类,该测试检查生成的字典是否同时包含作为键的-“lo”和“ethX”接口。 P、 美国。 别让我傻死了:)


Tags: fromtestimportselfiphost字典ping
1条回答
网友
1楼 · 发布于 2024-05-19 01:44:15

下面使用threading模块执行两个并行的ping测试,每个测试在两个接口上。对于以后的工作,使用multiprocessing模块和Pool()和{}这会更容易。在

# INSTALL:
#   sudo apt-get install python-scapy
# RUN:
#   sudo /usr/bin/python ./pping.py

import sys, Queue, threading
from scapy import all as S

IFACE_LIST = 'wlan0','lo'


# pylint:disable=E1101
def run_ping(iface, out_q):
    host = '8.8.8.8'
    pkt = S.Ether()/S.IP(dst=host, ttl=(1,3))/S.ICMP() 
    ans,_unans = S.srp(pkt, iface=iface, timeout=2) 
    out_q.put( (iface,ans) )


result_q = Queue.Queue()
for iface in IFACE_LIST:
    threading.Thread(
        target=run_ping, args=(iface, result_q)
    ).start()

for t in threading.enumerate():
    if t != threading.current_thread():
        t.join()

print 'result:', dict( [
    result_q.get()
    for _ in range(result_q.qsize())
    ] )

输出:

^{pr2}$

相关问题 更多 >

    热门问题