插座式

纳马

成员
已加入
2019年12月17日
留言内容
9
编程经验
Beginner
我已经用Socket(AddressFamily.InterNetwork,SocketType.Raw,ProtocolType.Icmp)为icmp数据包打开了一个原始套接字;
然后我将其与IPAddress.Any绑定
我已将请求数据包发送到我的计算机ip("192.168.1.29")
我知道由于wireshark,数据包是reacive的,我无法使用VS使用s.reacive获取数据包
我获取数据包的唯一方法是将套接字绑定到"192.168.1.29"然后添加选项
s.IOControl(IOControlCode.ReceiveAll,byTrue,null);
这是有问题的,因为那时我的程序或多或少地充当嗅探器,并且我无法使用sendTo发送回icmp数据包。
帮助谁将不胜感激
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,540
地点
弗吉尼亚州切萨皮克
编程经验
10+
您正在使用哪种防病毒软件,并且已禁用所有防火墙?您是否也禁用了Windows Defender防火墙?
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,540
地点
弗吉尼亚州切萨皮克
编程经验
10+
我无法收到带有s.reacive的包裹 使用VS
我假设是使用您的程序,而不是使用Visual Studio。当您编译并运行代码时,正在运行并尝试侦听数据包的是程序,而不是Visual Studio。如果您确实是说Visual Studio,那您是在编写Visual Studio扩展吗?
 

纳马

成员
已加入
2019年12月17日
留言内容
9
编程经验
Beginner
您正在使用哪种防病毒软件,并且已禁用所有防火墙?您是否也禁用了Windows Defender防火墙?

我没有禁用防火墙和防病毒。我也以管理员身份运行VS。
在我完成所有操作之前,我无法使用 s.IOControl(IOControlCode.ReceiveAll,byTrue,null);

我假设是使用您的程序,而不是使用Visual Studio。当您编译并运行代码时,正在运行并尝试侦听数据包的是程序,而不是Visual Studio。如果您确实是说Visual Studio,那您是在编写Visual Studio扩展吗?

是的,您是对的,我的意思是我的程序使用VS调试器运行
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,540
地点
弗吉尼亚州切萨皮克
编程经验
10+
已经有一段时间了,因为我必须进行低级套接字编程,但是我的记忆是必须将网卡(?)设置为混杂模式。无论如何,您是否看过: C#中的网络嗅探器
 

纳马

成员
已加入
2019年12月17日
留言内容
9
编程经验
Beginner
已经有一段时间了,因为我必须进行低级套接字编程,但是我的记忆是必须将网卡(?)设置为混杂模式。无论如何,您是否看过: C#中的网络嗅探器
问题是我不想建立一个嗅探器,我希望我的程序重新接收发送到我的计算机地址的数据包("192.168.1.29"),但出于某种原因,除非我添加iocontrol,否则socket.reacive不会返回
 

纳马

成员
已加入
2019年12月17日
留言内容
9
编程经验
Beginner
哦!我没意识到你不想充当嗅探器。你应该用 RecieveFrom() 或者 RecieveMessageFrom().
RecieveFrom也不起作用。两个函数都不会返回。似乎由于某种原因,该程序在其他IP上运行,即使它是计算机的本地IP。
我尝试打印所有计算机addressList和数据包发送到的IP(192.168.1.29)就是其中之一
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,540
地点
弗吉尼亚州切萨皮克
编程经验
10+
So can you definitely say that the sample code that came with the RecieveFrome() doesn't work for you as well?

我认为是时候共享您的代码了。现在,我们所能做的就是猜测您在做什么。
 

纳马

成员
已加入
2019年12月17日
留言内容
9
编程经验
Beginner
看着服务器,我试图将其范围缩小到基本,以查看它是否可以接收数据包。
 ללאשם。png

我也试图将套接字绑定到IPAddress.Parse("192.168.1.29")
如您在Wireshk中所见,数据包是recive.d
 ללאשם。png
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,933
地点
英国
编程经验
10+
将您的代码发布到文字而非图片上,请使用代码标签发布它们 [CODE=csharp]Your code here[/CODE]
 

纳马

成员
已加入
2019年12月17日
留言内容
9
编程经验
Beginner
C#:
static void Main(string[] args)
        {
            Socket s=new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.Icmp);
            s.ReceiveTimeout = 50000;
            s.Ttl = MyPing.TTL;
            //s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.DontFragment, 1); 
            s.Bind(new IPEndPoint(IPAddress.Any, 1550));
            byte[] buffer = new byte[MyPing.PACKET_MAX_SIZE];
            Console.WriteLine("ready to recive");
            IPEndPoint e = new IPEndPoint(IPAddress.Parse("192.168.1.25"), 1550);
            EndPoint e1 = (EndPoint)e;
            int size = s.ReceiveFrom(buffer, ref e1);
            Console.WriteLine("GOT MESSAGE");
        }
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,540
地点
弗吉尼亚州切萨皮克
编程经验
10+

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,933
地点
英国
编程经验
10+
第7至10行没有任何意义。

侦听器(本质上是您所需要的)旨在侦听来自所有IP地址的流量,那么为什么在第10行用自定义IP设置新的端点?

我建议看 插座 上面的链接,提供了有关如何编写的想法。使用提供的文档并使用示例源。确保其有效,然后对其进行编辑以适合您的需求。另外,如果您尝试使用低级API来解决网络引起的问题,则应配置网络,而不要依赖低级API进行修复。
 

纳马

成员
已加入
2019年12月17日
留言内容
9
编程经验
Beginner
第7至10行没有任何意义。

侦听器(本质上是您所需要的)旨在侦听来自所有IP地址的流量,那么为什么在第10行用自定义IP设置新的端点?

我建议看 插座 上面的链接,提供了有关如何编写的想法。使用提供的文档并使用示例源。确保其有效,然后对其进行编辑以适合您的需求。另外,如果您尝试使用低级API来解决网络引起的问题,则应配置网络,而不要依赖低级API进行修复。
第7至10行没有任何意义。

侦听器(本质上是您所需要的)旨在侦听来自所有IP地址的流量,那么为什么在第10行用自定义IP设置新的端点?

我建议看 插座 上面的链接,提供了有关如何编写的想法。使用提供的文档并使用示例源。确保其有效,然后对其进行编辑以适合您的需求。另外,如果您尝试使用低级API来解决网络引起的问题,则应配置网络,而不要依赖低级API进行修复。
香港专业教育学院试图使用reacive,而不是从相同的结果reacive
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,540
地点
弗吉尼亚州切萨皮克
编程经验
10+
奇怪的是,早在2009年有人试图接收ICMP数据包时遇到了同样的问题,而该问题似乎只是基于某些响应而从Vista开始的。
 

纳马

成员
已加入
2019年12月17日
留言内容
9
编程经验
Beginner
奇怪的是,早在2009年有人试图接收ICMP数据包时遇到了同样的问题,而该问题似乎只是基于某些响应而从Vista开始的。
我读到了,但很遗憾,他们建议的解决方案在这里并不太合适。
将他们添加的所有内容基本上都创建了一个嗅探器。我尝试通过icmp隧道传输tcp数据包。这意味着我必须将ping从服务器发送回客户端。
如果服务器和客户端连接到同一路由器(服务器嗅探其on数据包),则无法全部激活。
我也无法使用Vista两者的电脑都装有Windows 10
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,540
地点
弗吉尼亚州切萨皮克
编程经验
10+
我只是想指出,ICMP的问题从Vista开始,并且一直存在。在此之前,事情在XP中有效。
 
最佳 底部