2011-03-25 64 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主機的信息。