zoukankan      html  css  js  c++  java
  • 局域网中根据IP地址反查主机的名称(C#)

    你遇到过这种情况吗?你的防火墙报告局域网中的某个IP地址的电脑正在攻击你,但是防火墙却没有提示发出攻击的电脑名称,到底谁的电脑在攻击呢(攻击你的电脑可能是中毒了)?有一天早上你刚刚上班,打开电脑后发现连接不了服务器,到服务器那里一看才知道,原来有人使用了服务器的IP地址,到底谁在使用服务器的IP地址呢?nslookup 可以实现域名(主机名)的反查IP地址。哈哈,但今天说的是用C#实现。

    1. 根据IP地址获得主机名称
            /// <summary>
            
    /// 根据IP地址获得主机名称
            
    /// </summary>
            
    /// <param name="ip">主机的IP地址</param>
            
    /// <returns>主机名称</returns>
            public string GetHostNameByIp(string ip)
            {
                ip 
    = ip.Trim();
                
    if (ip == string.Empty)
                    
    return string.Empty;
                
    try
                {
                    
    // 是否 Ping 的通
                    if (this.Ping(ip))
                    {
                        System.Net.IPHostEntry host 
    = System.Net.Dns.GetHostEntry(ip);
                        
    return host.HostName;
                    }
                    
    else
                        
    return string.Empty;
                }
                
    catch (Exception)
                {
                    
    return string.Empty;
                }
            }

    说明:如果你的电脑可以上网你甚至可以查询到:IP地址“64.233.189.104”是 Google 的一个名为“hk-in-f104.google.com”的主机的IP地址。



    关于代码中 this.Ping(ip) 方法后面再说。
    既然说了如何“根据IP地址获得主机名称”,那就要再说说如何“根据主机名获得主机的IP地址”吧。

    2. 根据主机名获得主机的IP地址
            /// <summary>
            
    /// 根据主机名(域名)获得主机的IP地址
            
    /// </summary>
            
    /// <param name="hostName">主机名或域名</param>
            
    /// <example>GetIPByDomain("pc001"); GetIPByDomain("www.google.com");</example>
            
    /// <returns>主机的IP地址</returns>
            public string GetIpByHostName(string hostName)
            {
                hostName 
    = hostName.Trim();
                
    if (hostName == string.Empty)
                    
    return string.Empty;
                
    try
                {
                    System.Net.IPHostEntry host 
    = System.Net.Dns.GetHostEntry(hostName);
                    
    return host.AddressList.GetValue(0).ToString();
                }
                
    catch (Exception)
                {
                    
    return string.Empty;
                }
            }

    说明:如果你的电脑可以上网你甚至可以查询到:“www.google.com”的IP地址是“64.233.189.104”。



    最后,再说说C#实现简单的 Ping 的功能,用于测试网络是否已经联通。

    3. C#实现简单的 Ping 的功能,用于测试网络是否已经联通
            /// <summary>
            
    /// 是否能 Ping 通指定的主机
            
    /// </summary>
            
    /// <param name="ip">ip 地址或主机名或域名</param>
            
    /// <returns>true 通,false 不通</returns>
            public bool Ping(string ip)
            {
                System.Net.NetworkInformation.Ping p 
    = new System.Net.NetworkInformation.Ping();
                System.Net.NetworkInformation.PingOptions options 
    = new System.Net.NetworkInformation.PingOptions();
                options.DontFragment 
    = true;
                
    string data = "Test Data!";
                
    byte[] buffer = Encoding.ASCII.GetBytes(data);
                
    int timeout = 1000// Timeout 时间,单位:毫秒
                System.Net.NetworkInformation.PingReply reply = p.Send(ip, timeout, buffer, options);
                
    if (reply.Status == System.Net.NetworkInformation.IPStatus.Success)
                    
    return true;
                
    else
                    
    return false;
            }

    本文地址:http://www.cnblogs.com/anjou/archive/2007/10/11/920214.html
  • 相关阅读:
    22:django 配置详解
    21:序列化django对象
    20:django中的安全问题
    19:django 分页
    HTML 标签(一)
    流程图学习绘制
    HTTP原理
    终端的颜色代码
    Python 进程 线程总结
    Python Select模型
  • 原文地址:https://www.cnblogs.com/anjou/p/920214.html
Copyright © 2011-2022 走看看