.net - 如何在 .NET 中获取本地 IP?

标签 .net vbscript wmi

我有以下返回本地 IP 地址的 vbscript 代码。它工作得很好。我试图在我的 winform .net 应用程序中提供相同的功能。

我遇到的所有解决方案都涉及使用 DNS。关于如何“移植”此脚本以在 .net 中使用的任何想法?

一种不同的方法可以做到这一点?

谢谢!

Function GetIP()

 Dim ws : Set ws = CreateObject("WScript.Shell")
  Dim fso : Set fso = CreateObject("Scripting.FileSystemObject")
  Dim TmpFile : TmpFile = fso.GetSpecialFolder(2) & "/ip.txt"
  Dim ThisLine, IP
  If ws.Environment("SYSTEM")("OS") = "" Then
    ws.run "winipcfg /batch " & TmpFile, 0, True
  Else
    ws.run "%comspec% /c ipconfig > " & TmpFile, 0, True
  End If
  With fso.GetFile(TmpFile).OpenAsTextStream
    Do While NOT .AtEndOfStream
      ThisLine = .ReadLine
      If InStr(ThisLine, "Address") <> 0 Then IP = Mid(ThisLine, InStr(ThisLine, ":") + 2)
    Loop
    .Close
  End With

  If IP <> "" Then
    If Asc(Right(IP, 1)) = 13 Then IP = Left(IP, Len(IP) - 1)
  End If
  GetIP = IP
  fso.GetFile(TmpFile).Delete  
  Set fso = Nothing
  Set ws = Nothing
End Function

最佳答案

您可以通过查询网络接口(interface)来做到这一点,尽管这将包括所有本地地址,因此您可能必须添加 where如果有多个接口(interface)(可能会有),则选择您想要的那个。它当然不是您脚本的直接端口,但希望会有一些用处:

var localAddress = 
    (from ni in NetworkInterface.GetAllNetworkInterfaces()
     where ni.NetworkInterfaceType != NetworkInterfaceType.Loopback
     let props = ni.GetIPProperties()
     from ipAddress in props.UnicastAddresses
     select ipAddress).FirstOrDefault();    

注意:如果您只需要 IPv4 地址,则可以将查询更改为:
var localAddress = 
    (from ni in NetworkInterface.GetAllNetworkInterfaces()
     where ni.NetworkInterfaceType != NetworkInterfaceType.Loopback
     let props = ni.GetIPProperties()
     from ipAddress in props.UnicastAddresses
     where ipAddress.AddressFamily == AddressFamily.InterNetwork // IPv4
     select ipAddress).FirstOrDefault();     

关于.net - 如何在 .NET 中获取本地 IP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/956907/

相关文章:

c# - 在 ASP.NET MVC 中执行异步操作使用来自 .NET 4 上的 ThreadPool 的线程

vbscript - 修改文件图标

windows - 使用 wmic 作为不同的用户在本地主机上创建进程

delphi - Delphi 2007 之后的 WmiSet 是否有替代或更新?

c# - SelectQuery 占用 100% CPU

c# - 在 .NET 中读取文件内容更改

.net - 渗透测试盲 SQL 注入(inject)和 View 状态错误

file - 如何使用 VBscript 使用通配符查找和读取文件?

c# - 从 url 读取 pdf 文件到字节数组

vbscript - ASP Classic VB 错误 800a01a8 需要对象