2008-12-15 36 views
2

我使用pcapy/impacket庫來解碼Python中的網絡數據包。它有一個知道IPv4分組語法的IP解碼器,但顯然沒有IPv6解碼器。用於pcapy/impacket的IPv6解碼器

有沒有人得到一個?

在私人對應關係,在Impacket維護人員說,這可能是更好的開始Scapy

+0

看起來IPv6已被添加到反病毒軟件:http://code.google.com/p/impacket/downloads/detail?name=impacket-0.9.9.9.tar.gz&can=2&q= – rupello 2012-11-25 11:11:20

回答

-1

我從來沒有使用過pcapy,但我在C項目中使用libpcap的。由於pcapy頁面指出它不是靜態鏈接到libcap,所以你可以升級到一個新的IPv6支持。

根據libpcap changelog,2008年10月27日發佈的版本1.0具有默認的IPv6支持(它應該有更長的IPv6,但現在默認使用該選項編譯),所以您應該能夠捕獲IPv6與此版本的交通。最新的pcapy版本是從2007年3月27日開始的,所以最多它應該包含2007年9月10日發佈的0.9.8版本的libcap。

我不知道這是否足夠讓你能夠捕獲IPv6流量,因爲pcapy API可能需要一些更改才能支持它,這是在pcapy開發人員的屋頂上。

更新:顯然pylibpcap,一個Python包裝,以libpcap的,具有比pcapy新版本,所以新的libpcap的功能應該得到更好的支持。

關於PCAP(libpcap)的更多信息一般here

+0

我不是在說關於IPv6數據包的捕獲*(libpcap長期以來的工作),而關於它們的解碼。 libpcap不解碼,你必須用低級C技巧自己做。 pcapy附帶解碼器。 – bortzmeyer 2008-12-21 21:00:18

1

由Impacket維護人員推薦的Scapy目前沒有IPv6解碼。但是有一個unofficial extension這樣做。

有了這個擴展,它的工作原理:

for packet in traffic: 
    if packet.type == ETH_P_IPV6 or packet.type == ETH_P_IP: 
    ip = packet.payload 
    if (ip.version == 4 and ip.proto == UDP_PROTO) or \ 
     (ip.version == 6 and ip.nh == UDP_PROTO): 
     if ip.dport == DNS_PORT and ip.dst == ns: 
      all_queries = all_queries + 1 

,但它是大的痕跡非常緩慢。所以,我可能會嘗試但還是Impacket甚至回到C.

-1

您可以從

http://code.google.com/p/ipaddr-py/

即支持IPv4,IPv6的IP驗證

使用一個真正有用的一個文件庫從谷歌,網絡掩碼和前綴管理等等。它有很好的編碼和記錄。

好運
埃米利奧

+0

這可以通過`apt-get install python-ipaddr`在Ubuntu上完成 – 2013-05-30 20:16:05

1

你可能想看看dpkt,另一個包解析/建築庫。它是pypcap的作者寫的,它是一個不同的libpcap包裝器,但它不應該太難讓它與pcapy一起工作,以查看它是否比Scapy更快。