澳门新葡亰app

图片 50
安装Window 10系统——Computer阅历

索罗德巨惠优惠巨惠11.88万元 现车足够

Python获取本机全部网卡ip,掩码和播音地址实例代码

简介

在Socket编制程序的时候,大家须要实时获取大家所急需的IP地址。举例在编辑后门的时候,大家只怕必要得到有效的外网IP或内网IP;有的时候候我们或许必要判定我们拿到的是还是不是是虚构机网卡,那时就须求对每一张网卡上的表征举办识别。以下小编总结了部分常用的管理办法供大家仿效。

参谋资料:1.
领取网卡消息方式
              2.
设想与物理网卡区分方法

直白以来,好像从没风华正茂段正式的代码能提供Android设备这个时候的IP地址,究其原因,Android设备的网卡也许不止二个,如游侠客卡、WiFi网卡,何况同二个网卡也可能有可能具备持续叁个IP地址。基于此,多少个Android终端很有十分大概率同一时候具备多个IP地址(不只是同期持有IPv4和IPv6地址卡塔 尔(英语:State of Qatar),比方敞开火爆共享蜂窝互连网的时候,携程卡具有八个IPv4地址来拜访外网,WiFi网卡具备叁个IPv4地址来作为内网的网关。

获得本机全体IP地址:

string name = Dns.GetHostName();
IPAddress[] ipadrlist = Dns.GetHostAddresses(name);

         那几个地址是带有全部网卡(设想网卡卡塔尔的ipv4和ipv6地址。

正文首要探究的是使用Python获取本机全部网卡ip,掩码和播发地址,分享了连带的实例代码,具体介绍如下。

C++代码样例

网络相比较流行的收获Android设备IP地址的代码有以下三种,下边大家来挨门挨户解析一下。

赢得本机全数IPV4地址:

string name = Dns.GetHostName();
IPAddress[] ipadrlist = Dns.GetHostAddresses(name);
foreach (IPAddress ipa in ipadrlist)
{
            if (ipa.AddressFamily == AddressFamily.InterNetwork)
            Console.Writeline(ipa.ToString());
}

        若要单单获取ipv4地址,能够用IPAdress.AddressFamily
属性决断:对于 IPv4,重返 InterNetwork;对于 IPv6,再次来到 InterNetworkV6。

       
然则风姿浪漫旦本机或许有五个ipv4的地址,那怎么得到访谈私下认可网关时使用的网卡IP呢。在CSDN论坛找到了大神的方法,用的是查询本机路由表。

获得本机正在选取的ipv4地址(访问网络的IP),可别小看,照旧有多数急需酌量的:
1.三个Computer有几个网卡,有线的、无线的、还应该有vmare设想的三个网卡。
2.就算独有叁个网卡,但是该网卡配置了N个IP地址.此中还富含ipv6地址。

上边贴二个自身直接使用的方法,它经过询问本机路由表,获取访问默许网关时使用的网卡IP。
用了2年了,屡试屡验。

      /// <summary>
        /// 获取当前使用的IP
        /// </summary>
        /// <returns></returns>
        public static string GetLocalIP()
        {
            string result = RunApp("route", "print",true);
            Match m = Regex.Match(result, @"0.0.0.0s+0.0.0.0s+(d+.d+.d+.d+)s+(d+.d+.d+.d+)");
            if (m.Success)
            {
                return m.Groups[2].Value;
            }
            else
            {
                try
                {
                    System.Net.Sockets.TcpClient c = new System.Net.Sockets.TcpClient();
                    c.Connect("www.baidu.com", 80);
                    string ip = ((System.Net.IPEndPoint)c.Client.LocalEndPoint).Address.ToString();
                    c.Close();
                    return ip;
                }
                catch (Exception)
                {
                    return null;
                }
            }
        }

        /// <summary>
        /// 获取本机主DNS
        /// </summary>
        /// <returns></returns>
        public static string GetPrimaryDNS()
        {
            string result = RunApp("nslookup", "",true);
            Match m = Regex.Match(result, @"d+.d+.d+.d+");
            if (m.Success)
            {
                return m.Value;
            }
            else
            {
                return null;
            }
        }

        /// <summary>
        /// 运行一个控制台程序并返回其输出参数。
        /// </summary>
        /// <param name="filename">程序名</param>
        /// <param name="arguments">输入参数</param>
        /// <returns></returns>
        public static string RunApp(string filename, string arguments,bool recordLog)
        {
            try
            {
                if (recordLog)
                {
                    Trace.WriteLine(filename + " " + arguments);
                }
                Process proc = new Process();
                proc.StartInfo.FileName = filename;
                proc.StartInfo.CreateNoWindow = true;
                proc.StartInfo.Arguments = arguments;
                proc.StartInfo.RedirectStandardOutput = true;
                proc.StartInfo.UseShellExecute = false;
                proc.Start();

                using (System.IO.StreamReader sr = new System.IO.StreamReader(proc.StandardOutput.BaseStream, Encoding.Default))
                {
                    //string txt = sr.ReadToEnd();
                    //sr.Close();
                    //if (recordLog)
                    //{
                    //    Trace.WriteLine(txt);
                    //}
                    //if (!proc.HasExited)
                    //{
                    //    proc.Kill();
                    //}
                    //上面标记的是原文,下面是我自己调试错误后自行修改的
                    Thread.Sleep(100);           //貌似调用系统的nslookup还未返回数据或者数据未编码完成,程序就已经跳过直接执行
                                                 //txt = sr.ReadToEnd()了,导致返回的数据为空,故睡眠令硬件反应
                    if (!proc.HasExited)         //在无参数调用nslookup后,可以继续输入命令继续操作,如果进程未停止就直接执行
                    {                            //txt = sr.ReadToEnd()程序就在等待输入,而且又无法输入,直接掐住无法继续运行
                        proc.Kill();
                    }
                    string txt = sr.ReadToEnd();
                    sr.Close();
                    if (recordLog)
                        Trace.WriteLine(txt);
                    return txt;
                }
            }
            catch (Exception ex)
            {
                Trace.WriteLine(ex);
                return ex.Message;
            }
        }

大神代码源自帖子:

       

另有生龙活虎种情势通过用ipconfig来收获:

private void GetIP()  
    {  
        Process cmd = new Process();  
        cmd.StartInfo.FileName = "ipconfig.exe";//设置程序名   
        cmd.StartInfo.Arguments = "/all";  //参数   
 //重定向标准输出   
        cmd.StartInfo.RedirectStandardOutput = true;  
        cmd.StartInfo.RedirectStandardInput = true;  
        cmd.StartInfo.UseShellExecute = false;  
        cmd.StartInfo.CreateNoWindow = true;//不显示窗口(控制台程序是黑屏)   
 //cmd.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;//暂时不明白什么意思   
        /* 
 收集一下 有备无患 
        关于:ProcessWindowStyle.Hidden隐藏后如何再显示? 
        hwndWin32Host = Win32Native.FindWindow(null, win32Exinfo.windowsName); 
        Win32Native.ShowWindow(hwndWin32Host, 1);     //先FindWindow找到窗口后再ShowWindow 
        */  
        cmd.Start();  
        string info = cmd.StandardOutput.ReadToEnd();  
        cmd.WaitForExit();  
        cmd.Close();  
        textBox1.AppendText(info);  
    }

图片 1

那时将在本身动手看怎么着截取了。可参谋上面大神如何用正则表明式来合营。

搜了一天,竟然没找到大器晚成段合适的代码来获取机器中享有网卡的ip,掩码和播音地址,超越八分之四都以用socket,但是socket常常重返的要不正是内网地址,要不正是公网地址,不可以预知找到全体地点,真的太伤心了,决定本身通过ifconfig或ipconfig的归来音信,一步步地过滤了。本次的代码主要行使了正则表明式和subprocess模块,何况为了合作全部平台(win,linux和mac卡塔尔,也使用了platform来决断系统项目,不说太多,代码如下:

相关文章

No Comments, Be The First!
近期评论
    功能
    网站地图xml地图