使用 C# 获取 IPv4

Posted

技术标签:

【中文标题】使用 C# 获取 IPv4【英文标题】:Getting IPv4 using C# 【发布时间】:2021-12-13 08:56:12 【问题描述】:

我正在尝试使用 c# 获取 ipconfig cmd 的 IPv4 字符串,以便在 IIS 服务器上使用 API。我正在使用此代码

public static string GetLocalIPAddress()

    var host = Dns.GetHostEntry(Dns.GetHostName());
    foreach (var ip in host.AddressList)
    
        if (ip.AddressFamily == AddressFamily.InterNetwork)
        
            return ip.ToString();
        
    
    throw new Exception("No network adapters with an IPv4 address in the system!");

但我从中获得的 Ip 与 ipconfig cmd 中的不同。如何使用 C# 从 ipconfig cmd 获取确切的 IPv4?

【问题讨论】:

不清楚(对我来说)你在问什么 看看:***.com/questions/6803073/get-local-ip-address 一台计算机可以有任意数量的 IP 地址。因此,一个唯一的本地 IP 地址的想法是错误的。 电脑还是服务器? @JonasH 当你_想使用一个API时,你不需要知道你的IP。 【参考方案1】:

我不知道这是否是你想要做的。 但是你可以在c#中运行命令“ipconfig” 并使用正则表达式获取 ip。 像这样:

System.Diagnostics.ProcessStartInfo procStartInfo =
    new System.Diagnostics.ProcessStartInfo("cmd", "/c " + "ipconfig");
// The following commands are needed to redirect the standard output.
// This means that it will be redirected to the Process.StandardOutput StreamReader.
procStartInfo.RedirectStandardOutput = true;
procStartInfo.UseShellExecute = false;
// Do not create the black window.
procStartInfo.CreateNoWindow = true;
// Now we create a process, assign its ProcessStartInfo and start it
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo = procStartInfo;
proc.Start();
// Get the output into a string
string result = proc.StandardOutput.ReadToEnd();
// Get IP
result = Regex.Match(result,@"IPv4.*:.(?'ip'([0-9]0,3\.)3([0-9]0,3))").Groups["ip"].ToString();
// Display the command output.
Console.WriteLine(result);

【讨论】:

我认为这基本上回答了他的问题,但我也怀疑这是他要求的。 谢谢,这就是我要找的。我用英语问有点困难,因为它不是我的母语。【参考方案2】:

您也可以使用它。 选择您要使用的界面。 例如接口类型以太网和名称“以太网” 名称也可以是“vEthernet”或“Virtualbox”... 像这样:

foreach(NetworkInterface ni in NetworkInterface.GetAllNetworkInterfaces())
// Test connection type ip is Ethernet && Name == Ethernet
if(ni.NetworkInterfaceType == NetworkInterfaceType.Ethernet && ni.Name == "Ethernet")

    // Console.WriteLine(ni.Name);
    foreach (UnicastIPAddressInformation ip in ni.GetIPProperties().UnicastAddresses)
    
        if (ip.Address.AddressFamily == AddressFamily.InterNetwork)
        
            //Console.WriteLine(ip.Address.ToString());
            return ip.Address.ToString();
        
    

 

(这个会更优化)

【讨论】:

以上是关于使用 C# 获取 IPv4的主要内容,如果未能解决你的问题,请参考以下文章

C#获取IPv4代码

C# asp.net获取客户端的Ipv4 ip地址[重复]

C#创建用户控件 - IPv4地址输入框

在c#中以编程方式查询网卡的入站/出站IPv4数据包计数统计

一个基于C#编写的基础网络信息检测工具

asp.net C# 获取本机所有ip地址