以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]请问怎么用代码设置ip和dns?  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=187518)

--  作者:laipiwen
--  发布时间:2023/7/23 16:00:00
--  [求助]请问怎么用代码设置ip和dns?
用户在使用360等优化的时候经常将dns修改了,导致设置的内部解析无法正常使用。
请问老师怎么才能在打开程序的时候设置 本机ip和dns为自动获取,比如BeforeOpenProject事件中判断并处理呢?

--  作者:有点蓝
--  发布时间:2023/7/24 9:17:00
--  
我也不会
--  作者:chen37280600
--  发布时间:2023/7/24 10:11:00
--  
我帮你问了chatgpt,仅供参考

要使用VB.NET获取和修改本机的IP和DNS,你可以使用System.Net.NetworkInformation命名空间中的类来完成这些操作。具体步骤如下:

1. 获取本机的IP和DNS信息:

```vb.net
Imports System.Net.NetworkInformation

\' 获取本机的IP和DNS信息
Public Sub GetIPAndDNSInfo()
    \' 获取本机的网络接口信息
    Dim networkInterfaces As NetworkInterface() = NetworkInterface.GetAllNetworkInterfaces()

    For Each networkInterface As NetworkInterface In networkInterfaces
        Console.WriteLine("Interface Name: " & networkInterface.Name)
        Console.WriteLine("  Description: " & networkInterface.Description)
        Console.WriteLine("  Status: " & networkInterface.OperationalStatus.ToString())
        
        \' 获取IP地址信息
        Dim ipProperties As IPInterfaceProperties = networkInterface.GetIPProperties()
        Dim unicastAddresses As UnicastIPAddressInformationCollection = ipProperties.UnicastAddresses
        
        For Each unicastAddress As UnicastIPAddressInformation In unicastAddresses
            Console.WriteLine("  IP Address: " & unicastAddress.Address.ToString())
            Console.WriteLine("  Subnet Mask: " & unicastAddress.IPv4Mask.ToString())
        Next
        
        \' 获取DNS服务器信息
        Dim dnsServers As IPAddressCollection = ipProperties.DnsAddresses
        For Each dnsServer As IPAddress In dnsServers
            Console.WriteLine("  DNS Server: " & dnsServer.ToString())
        Next

        Console.WriteLine()
    Next
End Sub
```

2. 修改本机的IP和DNS信息:

**注意:修改本机的IP和DNS信息是非常敏感和危险的操作,需要管理员权限,慎重操作。以下示例代码仅供演示,不建议在生产环境中使用。**

```vb.net
Imports System.Net.NetworkInformation
Imports System.Net

\' 修改本机的IP和DNS信息
Public Sub SetIPAndDNSInfo(ByVal ipAddress As String, ByVal subnetMask As String, ByVal dnsServers As String())
    Dim networkInterfaces As NetworkInterface() = NetworkInterface.GetAllNetworkInterfaces()

    For Each networkInterface As NetworkInterface In networkInterfaces
        If networkInterface.NetworkInterfaceType = NetworkInterfaceType.Ethernet Then \' 仅修改以太网接口
            \' 禁用网络接口
            networkInterface.Disable()

            \' 修改IP地址和子网掩码
            Dim ipProperties As IPInterfaceProperties = networkInterface.GetIPProperties()
            Dim ipAddresses As UnicastIPAddressInformationCollection = ipProperties.UnicastAddresses
            
            For Each ipAddressInfo As UnicastIPAddressInformation In ipAddresses
                If ipAddressInfo.Address.AddressFamily = AddressFamily.InterNetwork Then
                    ipProperties.UnicastAddresses.Remove(ipAddressInfo)
                End If
            Next

            Dim newIPAddress As IPAddress = IPAddress.Parse(ipAddress)
            Dim newSubnetMask As IPAddress = IPAddress.Parse(subnetMask)
            Dim newIPInfo As New UnicastIPAddressInformation(newIPAddress, newSubnetMask)
            ipProperties.UnicastAddresses.Add(newIPInfo)

            \' 修改DNS服务器
            Dim dnsAddresses As IPAddressCollection = ipProperties.DnsAddresses
            dnsAddresses.Clear()
            For Each dnsServer As String In dnsServers
                dnsAddresses.Add(IPAddress.Parse(dnsServer))
            Next

            \' 使修改生效
            networkInterface.Enable()

            Console.WriteLine("IP and DNS settings modified successfully.")
            Exit Sub \' 如果有多个以太网接口,修改完第一个接口就退出循环
        End If
    Next

    Console.WriteLine("No Ethernet interface found.")
End Sub
```

使用上述代码时,请确保以管理员身份运行程序,以便进行网络接口的禁用和启用操作。此外,由于修改IP和DNS可能导致网络连接中断或其他问题,请谨慎使用,并确保备份重要数据和配置。

[此贴子已经被作者于2023/7/24 10:11:44编辑过]