2014-09-04 73 views
1

過濾器的TCP和端口,使用BerkeleyPacketFilterBerkeleyPacketFilter,通過TCP濾波器和端口

有問題從Pcap.net代碼轉換上的教程。需要能夠通過TCP過濾數據包並插入端口值。我無法理解BerkeleyPacketFilter語法。

 //choose port 
     Console.WriteLine("Choose port nr"); 
     string portnr = Console.ReadLine(); 
     int port = Int32.Parse(portnr); 


     // Compile the filter 
     using (BerkeleyPacketFilter filter = communicator.CreateFilter(port)) 
     { 
      // Set the filter 
      communicator.SetFilter(filter); 

裏面是什麼communicator.CreateFilter語法(如何插入INT端口)): 我也做了以下內容:

 IpV4Datagram ip = packet.Ethernet.IpV4; 
     TcpDatagram tcp = ip.Tcp; 
與PcapDotNet.Packets.Transport.TransportDatagram

回答

0

如果the page in the Pcap.Net User Guide giving an example of how to use the BerkeleyPacketFilter class是可信的,則CreateFilter方法確實NOT採取的整數作爲argum ent,它將一個字符串作爲參數。

這應該不會令人意外,因爲the documentation for the underlying libpcap/WinPCAP API for processing packet filters顯示pcap_compile()將字符串作爲參數,而the documentation for the format for filters指示過濾器是字符串。

如果你想匹配一個給定的TCP端口號的字符串,字符串爲「TCP端口ñ」,其中ñ是端口號。您必須採取port,將其轉換爲字符串,並將其與字符串「tcp port」(在「port」之後填入空白)連接,或者將portnr字符串與「tcp端口」連接起來。

請注意,您還必須NEVER假設communicator.CreateFilter()會成功。我沒有看到任何Pcap.Net的在線文檔,所以我不知道CreateFilter方法是否會爲無效過濾器表達式引發異常。

+0

謝謝!有另一種方式去,而不是communicator.CreateFilter()?另一種使用ip,tcp和port進行過濾的方法?在C#中 – ChristianP 2014-09-05 07:06:55