【发布时间】:2012-12-14 16:22:25
【问题描述】:
在 C# 中有没有办法找到我在特定端口上连接的服务器的 IP 地址?
我知道端口将始终为 28961,我想在此端口上获取我要连接的服务器的 IP 地址。
【问题讨论】:
标签: c# networking ip port
在 C# 中有没有办法找到我在特定端口上连接的服务器的 IP 地址?
我知道端口将始终为 28961,我想在此端口上获取我要连接的服务器的 IP 地址。
【问题讨论】:
标签: c# networking ip port
我写了一个程序来做类似的事情。我使用了SharpPcap 组件。下面的代码应该可以帮助您入门:
private void StartCapture(ICaptureDevice device)
{
// Register our handler function to the
// 'packet arrival' event
device.OnPacketArrival += new SharpPcap.PacketArrivalEventHandler(device_OnPacketArrival);
// Open the device for capturing
int readTimeoutMilliseconds = 1000;
device.Open(DeviceMode.Normal, readTimeoutMilliseconds);
device.Filter = "";
// Start the capturing process
device.StartCapture();
}
private void device_OnPacketArrival(object sender, CaptureEventArgs e)
{
var packet = PacketDotNet.Packet.ParsePacket(e.Packet.LinkLayerType, e.Packet.Data);
var ip = PacketDotNet.IpPacket.GetEncapsulated(packet);
if (ip != null)
{
int destPort = 0;
if (ip.Protocol.ToString() == "TCP")
{
var tcp = PacketDotNet.TcpPacket.GetEncapsulated(packet);
if (tcp != null)
{
destPort = tcp.DestinationPort;
}
}
else if (ip.Protocol.ToString() == "UDP")
{
var udp = PacketDotNet.UdpPacket.GetEncapsulated(packet);
if (udp != null)
{
destPort = udp.DestinationPort;
}
}
int dataLength = e.Packet.Data.Length;
string sourceIp = ip.SourceAddress.ToString();
string destIp = ip.DestinationAddress.ToString();
string protocol = ip.Protocol.ToString();
}
}
通过实现您自己的 if 语句,您应该能够使用上面的代码获得所需的内容。
【讨论】:
This CodeProject 文章可能对您有所帮助。它链接到一个完整工作的演示项目下载。它已经存在了很长时间,毫无疑问,在更高版本的 .NET 中有更简单的方法可以做到这一点。但它仍然有效,应该可以满足您的需求。
一旦您获得了活动 TCP/IP 连接的列表,您应该拥有所有需要的东西,可以在端口 28961 上选择一个并获取 IP 地址。
【讨论】: