我想问一下是否有可能从ping主机获取IpAddress。因此,如果有人ping我的电脑,我就知道他的IpAddress。我的代码看起来像这样:
Observable
Code Ran之后有人打电话给我,我知道ip ping了ping不是ping主机的那个。谢谢你们的帮助。
答案 0 :(得分:1)
尝试:
var ip = icmpListener.RemoteEndPoint;
如果使用面向连接的协议,则RemoteEndPoint属性将获取包含Socket所连接的远程IP地址和端口号的EndPoint。如果您使用的是无连接协议,则RemoteEndPoint包含Socket将与之通信的默认远程IP地址和端口号。在检索任何信息之前,必须将此EndPoint强制转换为IPEndPoint。然后,您可以调用IPEndPoint.Address方法来检索远程IPAddress,并使用IPEndPoint.Port方法来检索远程端口号。
使用cmd ping机器(ping 127.0.0.1
)时,您正在使用默认端口80
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端口无法访问的数据包。