c# - C#原始套接字接收数据包

标签 c# sockets icmp

当前正在尝试实现一个简单的ping程序,以自学C#和.NET中的网络编程。

我设法初始化了一个原始套接字,并正确地建立了一个ICMP回显请求包。运行程序时,Wireshark确认我正在将Echo Request发送到所需的目的地,但是远程计算机将永远不会发送回声回复。我尝试将所有结果都发送到多台计算机(并且可以使用Windows ping实用程序对每台计算机执行ping操作)。我的代码是这样的:

IcmpPacket echoReq = new IcmpPacket;
/*Some code to initialize packet*/
rawSocket.Send(echoReq, destinationIP); //syntax may be wrong, dont have the code infront of me sorry
rawSocket.ReceiveFrom(buffer, remoteEndpoint);

如果有人可以提出任何理由,说明为什么远程计算机不发送任何答复,我将不胜感激。

最佳答案

从问题信息中很难确定。有太多事情可能出错。但是,我将开始检查其中一些内容。

  • ICMP数据包的格式可能不正确。我将使用wireshark将您的自定义ping数据包的结果与已知的功能实用程序的结果进行比较,以查看
  • 是否存在差异
  • destinationIPremoteEndpoint值可以指向不同的地址。似乎不太可能,但想将其称为
  • 有问题的IP可能只是拒绝ping请求。我会用其他工具验证它正在返回ping
  • 防火墙可能会造成阻碍。我将暂时禁用它,然后重新运行程序以查看是否是原因。
  • 关于c# - C#原始套接字接收数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8838120/

    相关文章:

    python - 如何从 Python 中的另一个线程中止 socket.recv()

    java - 为什么会抛出此异常以及如何从中恢复?

    c++ - 将库添加到链接器

    sockets - 接收 "Destination Unreachable"数据包时不发送 ICMP 回显请求

    C# 通过自定义 UI 设置 SSIS 自定义数据流组件的自定义属性

    C# & SQL Server : how to Insert DBNull. 如果字符串值为空,命令参数中的值?

    c# - 从只接受类类型的方法动态返回一个对象

    linux - 如何告诉另一个线程一个线程在 recv() 调用中*现在*

    C# - 禁用 ICMP 的 Ping 服务器

    c# - 通过应用程序发布指向粉丝页面的链接