当前位置: 首页 > 编程语言 > C#

无法使用原始套接字读取传入的响应分享

时间:2023-04-10 22:47:59 C#

C#学习教程:无法使用原始套接字读取传入响应我阅读收到的回复?编辑:使用Wireshark我发现我正在寻找的数据是通过TCP发送的,我相信。套接字侦听器=新套接字(AddressFamily.InterNetwork、SocketType.Raw、ProtocolType.Unspecified);IPAddresslocalIP=Dns.GetHostByName(Dns.GetHostName()).AddressList[0];listener.Bind(newIPEndPoint(localIP,0));byte[]invalue=newbyte[4]{1,0,0,0};byte[]outvalue=newbyte[4]{1,0,0,0};listener.IOControl(IOControlCode.ReceiveAll,invalue,outvalue);while(true){byte[]buffer=newbyte[1000000];intread=listener.Receive(buffer);if(read>=20){Console.WriteLine("数据包从{0}到{1},协议{2},大小{3}",newIPAddress((long)BitConverter.ToUInt32(buffer,12)),newIPAddress((long)BitConverter.ToUInt32(buffer,16)),buffer[9],buffer[2]<<8|buffer[3]);}}端口0说他会监听所有端口,我认为你需要将ProtocolType.Unspecified设置为ProtocolType.IP。新套接字(AddressFamily.InterNetwork,SocketType.Raw,ProtocolType.Raw);对于ipv6,我在msdn上读到,原始套接字仅支持带有ipv4的ProtocolType.IP。我还认为这是一个无连接套接字?除非是这种情况,否则Reciveall将无效。如果你在ip头之后,你可以通过这样设置代码来获取它:Socketsck=newSocket(AddressFamily.InterNetwork,SocketType.Raw,ProtocolType.IP);sck.SetSocketOption(SocketOptionLevel.IP,SocketOptionName.HeaderIncluded,true);希望这会有所帮助:)我在我的C++程序中遇到了类似的问题,使用基本相同的原始套接字设置。在我的例子中,我可以在调试版本中看到传入的数据包,但在发布版本中看不到。传出数据包在两个版本中都是可见的。我没有在这个程序中发送任何数据包。我在Win7x64下使用VS2008本机C++构建。我的问题是防火墙。在VS中创建项目时,它显然在防火墙中放置了一个“允许”条目,用于项目构建的网络访问,但仅用于程序的调试构建。我必须为发布版本添加另一个条目,然后允许传入数据包。Win7下的高级防火墙设置也可能导致特定的协议被拦截,所以如果你只收到一些传入的消息,检查那个程序的入口设置。今天我想知道如何做同样的事情!这是我的代码,现在似乎可以正常工作,因为使它正常工作的功劳归功于回答者“TomErik”建议的ProtocolType.IP。以上就是C#学习教程:原始套接字无法读取传入响应分享的全部内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注——staticvoidMain(string[]args){//接收一些任意传入的IP流量到你网络上的一个IPV4地址使用原始套接字的适配器-需要管理员权限Sockets=newSocket(AddressFamily.InterNetwork,SocketType.Raw,ProtocolType.IP);IP地址ipAddress=Dns.GetHostEntry(Dns.GetHostName()).AddressList.Where((addr)=>addr.AddressFamily==AddressFamily.InterNetwork).Where((addr)=>addr.GetAddressBytes()[0]!=127)。第一的();s.Bind(新IPEndPoint(ipAddress,0));byte[]b=newbyte[2000];端点发送者=newIPEndPoint(0,0);intnr=s.ReceiveFrom(b,SocketFlags.None,refsender);}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: