gpt4 book ai didi

c# - 确定进程正在使用哪个网络适配器

转载 作者:行者123 更新时间:2023-11-30 17:12:19 25 4
gpt4 key购买 nike

我在 Google 上看到了几个类似的问题,但没有一个与我正在尝试做的完全匹配。我正在制作一个减少延迟的程序(用于游戏),它基本上会在某个进程打开时降低用户的 MTU,并在进程关闭时恢复它。但是,MTU 是特定于网络适配器的设置,一些用户有多个连接的网络适配器。为此,我认为让程序检测游戏正在使用哪个适配器,并且只更改该适配器上的 MTU 会很好。

游戏一次只会使用一个适配器。

我无法在终端服务器 IP 地址中进行硬编码,因为它们变化相当频繁。它似乎必须是一种在不知道最终 IP 地址的情况下确定其他进程正在使用哪个适配器的方法,但我似乎找不到它。

编辑:感谢 Cicada 和 Remco,我已经解决了这个问题。

我使用了 Remco 链接到的 ManagedIPHelper 类 (ManagedIpHelper),Cicada 的评论让我看到了这篇文章 (Identifying active network interface)

将它们与一些(令人讨厌的、极度未优化的)LINQ 结合起来,我得到了这个代码片段,它获取进程名称并返回它正在使用的网络接口(interface),如果找不到它则返回 null。

    private NetworkInterface getAdapterUsedByProcess(string pName)
{
Process[] candidates = Process.GetProcessesByName(pName);
if (candidates.Length == 0)
throw new Exception("Cannot find any running processes with the name " + pName + ".exe");

IPAddress localAddr = null;
using (Process p = candidates[0])
{
TcpTable table = ManagedIpHelper.GetExtendedTcpTable(true);
foreach (TcpRow r in table)
if (r.ProcessId == p.Id)
{
localAddr = r.LocalEndPoint.Address;
break;
}
}

if (localAddr == null)
throw new Exception("No routing information for " + pName + ".exe found.");

foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces())
{
IPInterfaceProperties ipProps = nic.GetIPProperties();
if (ipProps.UnicastAddresses.Any(new Func<UnicastIPAddressInformation, bool>((u) => { return u.Address.ToString() == localAddr.ToString(); })))
return nic;
}
return null;
}

测试证实这完美有效!非常感谢,伙计们!

任何使用此代码段的人的旁注:

  • 您将需要 ManagedIpHelper 类。
  • 您的应用可能需要请求提升,具体视情况而定。
  • 多个正在运行的进程(比如 Chrome)将返回未定义的结果。如果您打算将此代码用于多个候选进程的情况,我强烈建议您将using (Process p = candidates[0])更改为更特定过滤器,即基于 PID。
  • 您可能还想实现新的异常类型,例如,您可以更清楚地捕获“No routing info”,原因是这个错误通常只需稍等片刻即可修复(让目标进程打开连接),然后重试。

最佳答案

除了蝉,这一定对你有帮助:

它是一些 C/C++ 代码的 C# 包装器,它为您提供所有打开的连接列表以及关联的 PID(进程 ID)。

http://www.timvw.be/2007/09/09/build-your-own-netstatexe-with-c/

我相信这是唯一的方法,根据可执行路径/名称确定进程(id)并尝试找到该进程的当前连接。

关于c# - 确定进程正在使用哪个网络适配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10789898/

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