【问题标题】:Find IP Address of Outgoing Connection on a Certain Port在某个端口上查找传出连接的 IP 地址
【发布时间】:2012-12-14 16:22:25
【问题描述】:

在 C# 中有没有办法找到我在特定端口上连接的服务器的 IP 地址?

我知道端口将始终为 28961,我想在此端口上获取我要连接的服务器的 IP 地址。

【问题讨论】:

    标签: c# networking ip port


    【解决方案1】:

    我写了一个程序来做类似的事情。我使用了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 语句,您应该能够使用上面的代码获得所需的内容。

    【讨论】:

    • 如何指定设备?
    【解决方案2】:

    This CodeProject 文章可能对您有所帮助。它链接到一个完整工作的演示项目下载。它已经存在了很长时间,毫无疑问,在更高版本的 .NET 中有更简单的方法可以做到这一点。但它仍然有效,应该可以满足您的需求。

    一旦您获得了活动 TCP/IP 连接的列表,您应该拥有所有需要的东西,可以在端口 28961 上选择一个并获取 IP 地址。

    【讨论】:

      猜你喜欢
      • 2010-11-17
      • 1970-01-01
      • 2013-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-16
      • 1970-01-01
      • 2020-01-14
      相关资源
      最近更新 更多