gpt4 book ai didi

c# - .net 中的 IP 路由表查找

转载 作者:行者123 更新时间:2023-11-30 16:18:58 32 4
gpt4 key购买 nike

我有一台多宿主机器,需要回答这个问题:

给定远程机器的 IP 地址,哪个本地接口(interface)适合用于通信。

这需要在 C# 中完成。我可以使用 Win32 套接字和 SIO_ROUTING_INTERFACE_QUERY 执行此查询,但在 .net 框架文档中环顾四周,我还没有找到与之等效的内容。

最佳答案

有人很好地编写了代码,请参阅 https://searchcode.com/codesearch/view/7464800/

private static IPEndPoint QueryRoutingInterface(
Socket socket,
IPEndPoint remoteEndPoint)
{
SocketAddress address = remoteEndPoint.Serialize();

byte[] remoteAddrBytes = new byte[address.Size];
for (int i = 0; i < address.Size; i++) {
remoteAddrBytes[i] = address[i];
}

byte[] outBytes = new byte[remoteAddrBytes.Length];
socket.IOControl(
IOControlCode.RoutingInterfaceQuery,
remoteAddrBytes,
outBytes);
for (int i = 0; i < address.Size; i++) {
address[i] = outBytes[i];
}

EndPoint ep = remoteEndPoint.Create(address);
return (IPEndPoint)ep;
}

它的用法类似于(示例!):

IPAddress remoteIp = IPAddress.Parse("192.168.1.55");
IpEndPoint remoteEndPoint = new IPEndPoint(remoteIp, 0);
Socket socket = new Socket(
AddressFamily.InterNetwork,
SocketType.Dgram,
ProtocolType.Udp);
IPEndPoint localEndPoint = QueryRoutingInterface(socket, remoteEndPoint );
Console.WriteLine("Local EndPoint is: {0}", localEndPoint);

请注意,虽然用端口指定了 IpEndPoint,但端口是无关紧要的。此外,返回的 IpEndPoint.Port 始终为 0

关于c# - .net 中的 IP 路由表查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15625023/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com