从ping主机c#中捕获IpAddress

时间:2017-05-29 18:54:40

标签: c# networking ping

我想问一下是否有可能从ping主机获取IpAddress。因此,如果有人ping我的电脑,我就知道他的IpAddress。我的代码看起来像这样:

Observable

Code Ran之后有人打电话给我,我知道ip ping了ping不是ping主机的那个。谢谢你们的帮助。

1 个答案:

答案 0 :(得分:1)

尝试:

var ip = icmpListener.RemoteEndPoint;
  
    

如果使用面向连接的协议,则RemoteEndPoint属性将获取包含Socket所连接的远程IP地址和端口号的EndPoint。如果您使用的是无连接协议,则RemoteEndPoint包含Socket将与之通信的默认远程IP地址和端口号。在检索任何信息之前,必须将此EndPoint强制转换为IPEndPoint。然后,您可以调用IPEndPoint.Address方法来检索远程IPAddress,并使用IPEndPoint.Port方法来检索远程端口号。

  

enter image description here

使用cmd ping机器(ping 127.0.0.1)时,您正在使用默认端口80

ping该机器
Socket icmpListener = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.Icmp);
        icmpListener.Bind(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 80));
        icmpListener.IOControl(IOControlCode.ReceiveAll, new byte[] { 1, 0, 0, 0 }, new byte[] { 1, 0, 0, 0 });
        while (true)
        {
            byte[] buffer = new byte[4096];
            EndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0);
            int bytesRead = icmpListener.ReceiveFrom(buffer, ref remoteEndPoint);
            Console.WriteLine("ICMPListener received " + bytesRead + " from " + remoteEndPoint);
        }

在您执行任何操作之前,请以管理员身份打开CMD,然后键入以下命令:netsh advfirewall firewall add rule name="All ICMP v4" dir=in action=allow protocol=icmpv4:any,any 这将允许防火墙规则允许接收ICMP端口无法访问的数据包。

并且不要忘记以管理员身份运行C#程序