使用.NET,我怎样才能在任何端口上监听发送到.255的udp广播数据包,而无需绑定到特定的端口?如何监听任何端口上的广播数据包?
5
A
回答
4
我认为你需要比UDP更低的水平来实现这一点。
如果我真的想这样做,我首先要下载一个开源的数据包嗅探器/网络分析器(想到Ethereal.com)并仔细阅读源代码,看看它们如何读取数据包。
进一步看,我在tcpdump.org发现了很多关于数据包捕获的内容。
对不起,我不能给出特定的代码片段,我一直想绑定到特定的端口。
0
您需要使用WinPCap或类似的方法来在链路级嗅探数据包,然后过滤UDP广播。对不起,我不认为有这个更高级别的API。
6
我自己找到了一个方法。这是如何工作的:
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);
在异步处理程序中,我做了mainSocket.EndReceive(...),解析数据,如果想(从多线程接收外部进行控制),开始一个新的BeginReceive。
工程就像一个魅力。积分去Hitesh夏尔马(http://www.codeproject.com/KB/IP/CSNetworkSniffer.aspx)
相关问题
- 1. 如何监听端口上的传入数据包?
- 2. 如何在linux分布式系统中监听端口上的广播
- 3. 在收听特定端口时收到广播的数据包
- 4. 任何语言 - 端口监听器? [UDP]
- 5. AngularJS广播 - >监听
- 6. WinSock - UDP广播监听器
- 7. 如何在同一时间监听端口和从另一个端口进行广播? Python
- 8. 如何设置Apache监听端口43
- 9. 如何停止监听端口
- 10. 如何监听ICMP数据包?
- 11. 如何在c linux中的特定接口上收听广播?
- 12. 当收到UDP数据包时,该端口与监听端口不匹配
- 13. 使用Java的广播监听器?
- 14. 如何监听广播中的服务器回复?
- 15. 如何创建在Windows Phone的UDP广播监听套接字
- 16. 在USB端口上监听iPhone应用程序中的数据
- 17. 如何让'mvn lagom:runAll'让我的服务在端口上监听?
- 18. 编译nginx的naxsi犯规监听任何端口
- 19. 如何在终端上监听esc键?
- 20. 多路广播监听器效率
- 21. 广播接收器监听器
- 22. 在Delphi 7上监听串行端口
- 23. 我将如何在GUI上持续监听端口?
- 24. netty4:如何在多个端口上监听一个java进程
- 25. 如何确定在端口80上监听什么服务器
- 26. Winsock端口监听器
- 27. WCF监听TCP端口
- 28. Eclipse监听端口42540(?)
- 29. 使用JScript监听端口
- 30. Python端口监听器
我认为绑定的本质明确地阻止这种情况,但堆栈溢出告诉我,我从来不知道的各种事情。等待听到这个答案... – grenade 2009-08-05 13:11:44