2011-03-25 59 views
5

是否有人知道如何在Python中编写实时数据嗅探器来提取原始IP地址和正在访问的完整URL?我已经研究过从urlsnarf中提取数据,但是不支持IPv6(并且连接将连接到IPv6主机)。Python中的URL嗅探

虽然我可以从tcpdump中获取数据并为GET/POST进行grep,但这只会让我在web服务器上留下路径,并且我不会获得关联的FQDN。不幸的是,由于环境的配置,使用SQUID w/IPv6 TPROXY不是一个选项。

有没有人有关于如何使用libpcap的Python绑定来做到这一点的任何想法?您的帮助将是非常赞赏:)

谢谢:)

+2

Scapy应该有一些IPv6绑定。一旦你通过了IPv6的障碍,它应该只是解析http标题的问题。全部都在应用层,因此IPv6不应该影响正在发送的数据。 – krs1 2011-03-25 17:55:09

+0

http://stackoverflow.com/questions/462439/packet-sniffing-in-python-windows可能相关。 – 2011-03-25 17:55:43

回答

2

不幸的是,使用IPv6你坚持做你自己的TCP重新组装。好消息是你只关心URL数据,它应该(通常)在一个或两个数据包中。

你应该能够脱身使用pylibpcap来做到这一点。你需要在你的pcap对象上使用setfilter来确保你只查看TCP流量。随着您在pcap循环中前进,您将向负载应用一些HTTP正则表达式。如果你有什么看起来像HTTP流量继续前进,并尝试解析标题来获取URL数据。希望在分组结束之前,你会得到一个换行符的完整URL。如果没有,你将不得不做一些轻量级的TCP重组。

哦,你会想使用socket.inet_ntop和socket.getaddrinfo打印出有关IPv6主机的信息。