特定のポートで接続しているサーバーの IP アドレスを C# で見つける方法はありますか?
ポートは常に 28961 であり、このポートで接続しているサーバーの IP アドレスを取得したいと考えています。
特定のポートで接続しているサーバーの IP アドレスを C# で見つける方法はありますか?
ポートは常に 28961 であり、このポートで接続しているサーバーの IP アドレスを取得したいと考えています。
私は似たようなことをするプログラムを書きました。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 ステートメントを実装することで、上記のコードを使用して必要なものを取得できるはずです。
この CodeProject の記事が役立つ場合があります。これは、完全に機能するデモ プロジェクトのダウンロードにリンクしています。これは長い間存在しており、新しいバージョンの .NET でこれを行う簡単な方法があることは間違いありません。しかし、それでも機能し、必要なものを提供するはずです。
アクティブな TCP/IP 接続のリストを取得したら、ポート 28961 の接続を選択して IP アドレスを取得するために必要なものがすべて揃っているはずです。