2009-08-05 25 views
5

Sử dụng .NET, làm thế nào tôi có thể nghe các gói phát sóng udp được gửi tới .255 trên bất kỳ cổng nào mà không cần ràng buộc với một cổng cụ thể?Làm cách nào để nghe các gói phát sóng trên bất kỳ cổng nào?

+0

Tôi nghĩ bản chất ràng buộc ngăn chặn rõ ràng kịch bản này, nhưng Stack Overflow dạy tôi tất cả những thứ mà tôi chưa bao giờ biết. Đang chờ nghe câu trả lời trên cái này ... – grenade

Trả lời

4

Tôi nghĩ bạn sẽ cần phải thấp hơn UDP để thực hiện việc này.

Nếu tôi thực sự muốn thực hiện điều này, tôi sẽ bắt đầu bằng cách tải xuống máy phân tích gói/phân tích mạng nguồn mở (Ethereal.com) và tìm hiểu cách đọc các gói.

Nhìn xa hơn, tôi tìm thấy khá nhiều về việc chụp gói tại tcpdump.org.

Rất tiếc, tôi không thể cung cấp đoạn mã cụ thể, tôi luôn muốn liên kết với một cổng cụ thể.

0

Bạn sẽ cần sử dụng WinPCap hoặc tương tự như gói sniff ở cấp liên kết, sau đó lọc cho chương trình phát sóng UDP. Xin lỗi, tôi không nghĩ có API cấp cao hơn cho việc này.

6

Tôi đã tự tìm được cách. Đây là cách hoạt động:

mainSocket = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP); 
mainSocket.Bind(new IPEndPoint(IPAddress.Parse("192.168.0.1"), 0)); 
mainSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.HeaderIncluded, true);       

byte[] byTrue = new byte[4] { 1, 0, 0, 0 }; 
byte[] byOut = new byte[4] { 1, 0, 0, 0 }; 

// Socket.IOControl is analogous to the WSAIoctl method of Winsock 2 
mainSocket.IOControl(IOControlCode.ReceiveAll, //Equivalent to SIO_RCVALL constant of Winsock 2 
    byTrue, 
    byOut); 

//Start receiving the packets asynchronously 
mainSocket.BeginReceive(byteData,0,byteData.Length,SocketFlags.None,new AsyncCallback(OnReceive),null); 

Trong xử lý async, tôi làm một mainSocket.EndReceive (...), phân tích dữ liệu và bắt đầu một BeginReceive mới nếu muốn (điều khiển từ bên ngoài người nhận multithreaded).

Hoạt động như một sự quyến rũ. Tín dụng đi đến Hitesh Sharma (http://www.codeproject.com/KB/IP/CSNetworkSniffer.aspx)

Các vấn đề liên quan