如题,我想在代码里去Ping对方的网站,得到对方网站的IP(包括电信,网通,其它网).别人给我一个思路是修改本机的DNS,然后去Ping对方的网站。我不知道怎么用代码修改自己的DNS.(求这个代码)还有就是在2次不同DNS去Ping对方网站的时候需要清理下缓存,这个怎么弄?麻烦高手指教还有就是有其它办法也可以。

解决方案 »

  1.   

    http://msdn.microsoft.com/en-us/library/Aa394217
      

  2.   

    以下的VB Script代码利用WMI修改本机的Gateway,DNS设置(将下面的代码存成 .VBS文件直接双击运行即可).Const STR_NEWDNS1 = "192.168.0.1" 
    Const STR_NEWDNS2 = "192.168.0.43"
    Const STR_GATEWAY = "192.168.0.1"Set fs = CreateObject("Scripting.FileSystemObject") 
    Set outFile = fs.CreateTextFile("NetworkAdapterConfiguration.txt", True) strWinMgmt = "winmgmts:{impersonationLevel=impersonate}"
    Set objNICs = GetObject( strWinMgmt ).InstancesOf( "Win32_NetworkAdapterConfiguration" )outFile.WriteLine("Begin to change DNS...")For Each objNIC In objNICs
     If objNIC.IPEnabled Then
      objNIC.SetDNSServerSearchOrder Array(STR_NEWDNS1,STR_NEWDNS2)
      outFile.WriteLine(objNIC.Description & "  ")
      outFile.WriteLine("Change DNS ok")
      objNIC.SetGateways Array(STR_GATEWAY)
      outFile.WriteLine("Change gateway ok")
     End If
    Next
    outFile.WriteLine("Change over")
      

  3.   

    01.using System;   
    02.using System.Collections.Generic;   
    03.using System.Text;   
    04.using System.Management;   
    05.  
    06.namespace ConsoleApplication1._   
    07.{   
    08.    class Program   
    09.    {   
    10.        static void Main(string[] args)   
    11.        {   
    12.            ShowNetworkAdapterInfo();   
    13.            SetNetworkAdapter();   
    14.            ShowNetworkAdapterInfo();   
    15.            Console.ReadKey();   
    16.        }   
    17.        /// <summary>   
    18.        /// 设置网络适配器   
    19.        /// </summary>   
    20.        static void SetNetworkAdapter()   
    21.        {   
    22.            ManagementBaseObject inPar = null;   
    23.            ManagementBaseObject outPar = null;   
    24.            ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");   
    25.            ManagementObjectCollection moc = mc.GetInstances();   
    26.            foreach (ManagementObject mo in moc)   
    27.            {   
    28.                if (!(bool)mo["IPEnabled"])   
    29.                    continue;   
    30.  
    31.                //设置ip地址和子网掩码    
    32.                inPar = mo.GetMethodParameters("EnableStatic");   
    33.                inPar["IPAddress"] = new string[] {  "192.168.1.9" };   
    34.                inPar["SubnetMask"] = new string[] {  "255.255.255.0" };   
    35.                outPar = mo.InvokeMethod("EnableStatic", inPar, null);   
    36.  
    37.                //设置网关地址    
    38.                inPar = mo.GetMethodParameters("SetGateways");   
    39.                inPar["DefaultIPGateway"] = new string[] {  "192.168.1.1" };   
    40.                outPar = mo.InvokeMethod("SetGateways", inPar, null);   
    41.  
    42.                //设置DNS    
    43.                inPar = mo.GetMethodParameters("SetDNSServerSearchOrder");   
    44.                inPar["DNSServerSearchOrder"] = new string[] {"202.118.176.2" };   
    45.                outPar = mo.InvokeMethod("SetDNSServerSearchOrder", inPar, null);   
    46.                break;   
    47.            }   
    48.        }   
    49.        /// <summary>   
    50.        /// 显示当前的ip 网卡 dns 等信息   
    51.        /// </summary>   
    52.        static void ShowNetworkAdapterInfo()   
    53.        {   
    54.            Console.WriteLine("****** Current Network Adapter Information ******");   
    55.            ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");   
    56.            ManagementObjectCollection moc = mc.GetInstances();   
    57.            foreach (ManagementObject mo in moc)   
    58.            {   
    59.                if (!(bool)mo["IPEnabled"])   
    60.                    continue;   
    61.  
    62.                Console.WriteLine("{0}\n SVC: '{1}' MAC: [{2}]", (string)mo["Caption"],   
    63.                    (string)mo["ServiceName"], (string)mo["MACAddress"]);   
    64.  
    65.                string[] addresses = (string[])mo["IPAddress"];   
    66.                string[] subnets = (string[])mo["IPSubnet"];   
    67.                string[] gateways = (string[])mo["DefaultIPGateway"];   
    68.                string[] dnses = (string[])mo["DNSServerSearchOrder"];   
    69.  
    70.                Console.WriteLine(" Addresses :");   
    71.                foreach (string sad in addresses)   
    72.                    Console.WriteLine("\t'{0}'", sad);   
    73.  
    74.                Console.WriteLine(" Subnets :");   
    75.                foreach (string sub in subnets)   
    76.                    Console.WriteLine("\t'{0}'", sub);   
    77.                Console.WriteLine(" Gateways:");   
    78.                foreach (string gw in gateways)   
    79.                    Console.WriteLine("\t'{0}'", gw);   
    80.  
    81.                Console.WriteLine(" DNS:");   
    82.                foreach (string dns in dnses)   
    83.                    Console.WriteLine("\t'{0}'", dns);   
    84.            }   
    85.        }    
    86.  
    87.    }   
    88.}  
      

  4.   

    你的需求可能有问题,能用ip的地方就能用域名,你ping出来有什么用?
    大网站同一个域名有很多ip做均衡,你希望是如何处理?我不知道别人给你的是思路,修改本机的DNS有什么用?你手工修改就行了,但是要修改成什么?难道是你要自己做个DNS服务器?
    至于说清理下缓存,即使你清理了,但dns可不是只有你的机器上缓存,一路查询过来的都可能缓存,即使你一次都没ping过的域名,ping出来的结果也很可能是互联网上某个dns服务器上的缓存而已
      

  5.   

    C# 这块怎么引用都报错?
     ManagementBaseObject inPar = null;   
                ManagementBaseObject outPar = null;   
                ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");   
                ManagementObjectCollection moc = mc.GetInstances();   
      

  6.   

    没引用 System.Management.dll  这个文件吧,
    不过还是劝你考虑一下你到底需要什么?修改客户端的dns是一种恶意软件才做的事。
      

  7.   

    “修改”自己的DNS,不知所云。DNS是用来查询访问的,修改成什么呢?
    要通过DNS查询IP,可以这样写(demo):using System;
    using System.Net;namespace ConsoleApplication2
    {
        class Program
        {
            static void Main(string[] args)
            {
                var ipArray = Dns.GetHostAddresses("www.microsoft.com");
                foreach (var ip in ipArray)
                    if (ip.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
                        Console.WriteLine(ip.ToString());
                Console.ReadKey();
            }
        }
    }
      

  8.   

    许多服务器时不支持Ping的。Ping跟“得到对方IP”是两回事。如果你要得到对方IP,通过DNS查询就行了,用Ping反而是多此一举。使用Ping,是用来测试对方服务器的链接情况(但是仅对支持ICMP且防火墙允许Ping的机器),而不是用来得到IP的。如果要Ping,可以这样写(demo):using System;
    using System.Net.NetworkInformation;namespace ConsoleApplication2
    {
        class Program
        {
            static void Main(string[] args)
            {
                var pn = new Ping();
                var result = pn.Send("www.google.com");
                Console.WriteLine("ping {0} result {1}.", result.Address.ToString(), result.Status == IPStatus.Success ? "成功" : "失败");
                Console.ReadKey();
            }
        }
    }
      

  9.   

    如果服务器有电信和网通两个网卡,你通过网络连接到电信的那个网卡,那么无论如何你都不可能ping出网通的那个网卡的IP,除非你把电脑接到他网通的那个网络上,或者去查询他的信息产业部备案信息
      

  10.   

    谢谢上面给的意见。我只是想得到通过修改本机的DNS,去解析一个域名的IP。我的目的是判断这个IP是不是我们分配出去的。
      

  11.   

    你打命令行
    nslookup然后输入你要的域名,使用默认的dns服务器
    www.sina.com或者加上另外的dns服务器地址,比如google的8.8.8.8的地址
    www.sina.com 8.8.8.8看看是不是实现你的需求,如果是,那就是你要实现类似nslookup的功能的软件了