提问人:Uwe_98 提问时间:11/1/2019 最后编辑:Uwe_98 更新时间:11/1/2019 访问量:276
编写有关网络爬虫的TCP流量的pcap文件
Write pcap file about TCP traffic of a web-crawler
问:
URL 请求和 sniff(count=x) 不能协同工作。sniff(count) 正在等待 x 个数据包进行嗅探,尽管我必须将该行放在 url-request 之前,但它会阻止程序,但 url 请求永远不会启动,它永远不会嗅探任何数据包。
当我在 ubuntu 命令行中打开 2 个 Windows 时,它起作用了。在第一个窗口中,我激活了 python 的交互模式并激活了嗅探器。完成后,我在第二个窗口中启动了网络爬虫,第一个窗口中的嗅探器正确接收了数据包并将其放在屏幕上/放入 pcap 文件中。
现在最简单的方法是编写 2 个脚本并从 2 个不同的 Windows 启动它们,但我想在一个脚本中完成完整的工作:网络爬虫、嗅探数据包并将它们放入 pcap 文件中
这是不起作用的代码:
class spider():
…
def parse():
a = sniff(filter="icmp and host 128.65.210.181", count=1)
req = urllib.request.urlopen(self.next_url.replace(" ",""))
a.nsummary()
charset = req.info().get_content_charset()
现在第一行阻止程序,等待 4 数据包进入,什么不能这样做,因为只有在下一行中请求才完成。交换线路也不起作用。我认为解决问题的唯一方法是与无所事事一起工作,所以我也尝试过这个:
class protocoller():
...
def run(self):
self.pkt = sniff(count=5) # and here it blocks
…
prot = protocoller()
Main.thr = threading.Thread(target=prot.run())
Main.thr.start()
我一直认为线程是从主程序独立运行的,但它阻止了它,就好像它会成为它的一部分一样。有什么建议吗?
因此,我需要的是一个解决方案,其中网络爬虫和基于 scapy 的 IP/TCP 协议器彼此独立运行。
scapy 的 sr() 函数可以替代吗?
https://scapy.readthedocs.io/en/latest/usage.html
是否可以手动将请求放入数据包中,并将收到的数据包放入 pcap 文件中?
答:
您的示例没有显示其他线程中发生的事情,因此我假设您有第二个线程来执行请求等。如果一切都井井有条,那么明显的错误就在这里:
Main.thr = threading.Thread(target=prot.run())
这将执行该函数并将结果传递给 的参数。它应该是:prot.run
target
Thread
Main.thr = threading.Thread(target=prot.run)
这会将函数本身传递给Thread
评论
另一个答案效果很好。 仅供参考,Scapy 2.4.3 也有一个原生的方式来做到这一点:
https://scapy.readthedocs.io/en/latest/usage.html#asynchronous-sniffing
评论