精华内容
下载资源
问答
  • #region 读取本地IP地址和子网页码 //读取本地IP地址和子网页码 NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces(); foreach (NetworkInterface adapter in nics) ...
      #region 读取本地IP地址和子网页码
                //读取本地IP地址和子网页码
                NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces();
                foreach (NetworkInterface adapter in nics)
                {
                    if (adapter.NetworkInterfaceType.ToString().Equals("Ethernet"))
                    {
                        //adapter.Name;     //网卡适配名称:“本地连接”
                        //adapter.Description;   //适配器描述信息
                        IPInterfaceProperties ip = adapter.GetIPProperties();     //IP配置信息
    
                        if (ip.UnicastAddresses.Count > 0)
                        {
                            string localip = ip.UnicastAddresses[1].Address.ToString();   //IP地址
                            txtIP.Text = localip;
                            string localcode = ip.UnicastAddresses[1].IPv4Mask.ToString();  //子网掩码
                            txtZWym.Text = localcode;
    
                        }
                        if (ip.GatewayAddresses.Count > 0)
                        {
                            string net = ip.GatewayAddresses[0].Address.ToString();   //默认网关
                            txtWg.Text = net;
                        }
    
                        if (ip.DnsAddresses.Count > 0)
                        {
                            ip.DnsAddresses[0].ToString();       //首选DNS服务器地址
                            if (ip.DnsAddresses.Count > 1)
                                ip.DnsAddresses[1].ToString();  //备用DNS服务器地址
                            //MessageBox.Show(" ip.DnsAddresses[0].ToString();:" + ip.DnsAddresses[0].ToString());
                        }
                    }
                }
                #endregion

     方法二:上面的方法有时候读不出来子网掩码,需要如下方法:

      ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
                ManagementObjectCollection nics = mc.GetInstances();
                foreach (ManagementObject nic in nics)
                {
                    if (Convert.ToBoolean(nic["ipEnabled"]) == true)
                    {
                        string mac = nic["MacAddress"].ToString();//Mac地址
    
                        string ip = (nic["IPAddress"] as String[])[0];//IP地址
                        txtIP.Text = ip;
                        string ipsubnet = (nic["IPSubnet"] as String[])[0];//子网掩码
                        txtZWym.Text = ipsubnet;
                        string ipgateway = (nic["DefaultIPGateway"] as String[])[0];//默认网关
                        txtWg.Text = ipgateway;
                    }
                }

     

    转载于:https://www.cnblogs.com/aijiao/p/10030972.html

    展开全文
  • 这个代码是字节在学习C# 做一些小的功能事例,比如实现界面跳转,读取IP,菜单栏等
  • 最近项目中需要读取本地网口的ip地址,然后在网上搜索了一下相关的内容。发现网上一些方法不够严谨,在实际应用时出现了一些问题。下面是我结合网上例子修改后的代码,比较简单。有什么问题还望指出。 static int ...

    最近项目中需要读取本地网口的ip地址,然后在网上搜索了一下相关的内容。发现网上一些方法不够严谨,在实际应用时出现了一些问题。下面是我结合网上例子修改后的代码,比较简单。有什么问题还望指出。

    static int get_ip(const char *inf_name,char *ip)
    {
    	if((inf_name == NULL)||(ip == NULL))
    	{
    		DPRINT("get ip failed,empty inf_name or ip buff\n");
    		return -1;
    	}
    	
    	struct ifaddrs *ifc,*ifc_header;
    	if(getifaddrs(&ifc)<0)
    	{
    		DPRINT("getifaddrs failed:%s\n",strerror(errno));
    		return -1;
    	}
    	ifc_header = ifc;
    
    	while (ifc != NULL)
    	{
    		//注意:CAN接口也是用socket,但是CAN没有IP地址,ifa_addr为空;这里要进行判断,否则会出现操作野指针的情况,导致Segmentation fault。 		
    		if (ifc->ifa_addr != NULL)	
    		{
    			if (ifc->ifa_addr->sa_family==AF_INET && 0 == strcmp(ifc->ifa_name,inf_name))
    			{
    				inet_ntop(AF_INET, &((struct sockaddr_in *)ifc->ifa_addr)->sin_addr,ip,INET_ADDRSTRLEN);
    				freeifaddrs(ifc_header);
    				return 0;
    			}
    		}
    		
    		ifc=ifc->ifa_next;
    	}
    	freeifaddrs(ifc_header);
    	DPRINT("%s not found\n",inf_name);
    	return -1;
    }
    

    需要注意的地方:
    1、为什么定义了ifc和ifc_header?
    看一下man中的说明,getifaddrs函数用于创建一个网络接口地址的链表,并保存这个链表的头指针,通过遍历网络接口地址链表来找到你要获取ip的那个网口。如果定义一个ifaddrs地址类型,在遍历的时候一直在变。那么freeifaddrs()释放此地址的时候就会有问题,可能造成内存泄漏或操作野指针的情况。所以定义了两个,一个用于保存链表的header,用于释放链表。在这里插入图片描述2、ifa_next指向了链表中的下一个地址,当为链表最后一个元素时ifa_next为NULL。结构体中ifa_addr即为socket接口的地址。这里需要特别注意:can也是用的socket接口在遍历时同样会遍历到can接口,但是**can接口是没有IP地址的。故相应的ifc->ifa_addr为NULL。如果此时再去操作ifc->ifa_addr即出现操作空指针的情况,会导致Segmentation fault。**当然这种情况只会出现在设备中有socket can接口的时候。刚开始时没有考虑到这种情况,在电脑上运行的时候一切正常,放在我设备运行的时候一直都报错,百思不得其解。后来经过大神指点才恍然大悟。遍历到指定的接口后取出IP地址,否则打印错误信息。
    在这里插入图片描述

    展开全文
  • 读取Windows的IP地址有三种方法: QT的QNetworkInterface IPHlpApi QT的QSettings读注册表 修改windows的IP地址使用 netsh
  • Java获取本地ip地址

    千次阅读 2018-09-14 11:58:34
    获取本地ip地址本来是应该很简单的,但是在项目中本地实现了之后,放到生产环境却不行了,一直获取不到本地ip. 下面先粘出我在生产环境中没有获取到ip地址的一般简单的获取ip地址的流程,最后面是我的解决方法...

    获取本地ip地址本来是应该很简单的,但是在项目中本地实现了之后,放到生产环境却不行了,一直获取不到本地ip.

    下面先粘出我在生产环境中没有获取到ip地址的一般简单的获取ip地址的流程,最后面是我的解决方法(代码):

    public static String getLocalIpAddr() {
        Enumeration<NetworkInterface> networks = null;
        try {
            // 获取网卡设备
            networks = NetworkInterface.getNetworkInterfaces();
        } catch (SocketException e) {
            logger.info(e.getMessage());
        }
        InetAddress ip = null;
        Enumeration<InetAddress> addrs;
        // 遍历网卡设备
        while (networks.hasMoreElements()){
            addrs = networks.nextElement().getInetAddresses();
            while (addrs.hasMoreElements()){
                ip = addrs.nextElement();
                if (ip != null && ip instanceof InetAddress && ip.isSiteLocalAddress()){
                    if (ip.getHostAddress()==null || "".equals(ip.getHostAddress())){
                        logger.info("获取到的客户端内网ip为空,从配置文件读取本地ip。");
                        return null;
                    }
                    return ip.getHostAddress();// 客户端ip
                }
            }
        }
        return null;
    }

     

    这样获取在生产环境中出现了ip地址获取不到的情况,因此修改成下面的非常规方法来获取了(皮一下,哈哈):

     

    public static String getLocalIpAddr() {
    
        String clientIP = null;
        Enumeration<NetworkInterface> networks = null;
        try {
            //获取所有网卡设备
            networks = NetworkInterface.getNetworkInterfaces();
            if (networks == null) {
                //没有网卡设备 打印日志  返回null结束
                logger.info("networks  is null");
                return null;
            }
        } catch (SocketException e) {
            System.out.println(e.getMessage());
        }
        InetAddress ip;
        Enumeration<InetAddress> addrs;
        // 遍历网卡设备
        while (networks.hasMoreElements()) {
            NetworkInterface ni = networks.nextElement();
            try {
                //过滤掉 loopback设备、虚拟网卡
                if (!ni.isUp() || ni.isLoopback() || ni.isVirtual()) {
                    continue;
                }
            } catch (SocketException e) {
                logger.info(e.getMessage());
            }
            addrs = ni.getInetAddresses();
            if (addrs == null) {
                logger.info("InetAddress is null");
                continue;
            }
            // 遍历InetAddress信息
            while (addrs.hasMoreElements()) {
                ip = addrs.nextElement();
                if (!ip.isLoopbackAddress() && ip.isSiteLocalAddress() && ip.getHostAddress().indexOf(":") == -1) {
                    try {
                        clientIP = ip.toString().split("/")[1];
                    } catch (ArrayIndexOutOfBoundsException e) {
                        clientIP = null;
                    }
                }
            }
        }
        return clientIP;
    }

     

    因为打印InetAddress对象的时候会打印成  /xxx.xxx.xxx.xxx  这样的格式,所以直接就将这个字符串解析了,虽然比较粗暴,但是也是有效的。

    展开全文
  • VC 获取本地ip地址

    千次阅读 2016-11-30 23:10:37
    获取本地IP地址有两种做法。一种是使用gethostname函数,代码如下: [cpp] view plain copy   bool CSocketComm::GetLocalAddress(std::string& strAddress)  {   char...

    获取本地IP地址有两种做法。一种是使用gethostname函数,代码如下:


    [cpp]  view plain  copy
      在CODE上查看代码片 派生到我的代码片
    1. bool CSocketComm::GetLocalAddress(std::string& strAddress)  
    2. {  
    3.     char strHost[HOSTNAME_SIZE] = { 0 };  
    4.   
    5.     // get host name, if fail, SetLastError is called  
    6.     if (SOCKET_ERROR != gethostname(strHost, sizeof(strHost)))  
    7.     {  
    8.         struct hostent* hp;  
    9.         hp = gethostbyname(strHost);  
    10.         if (hp != NULL && hp->h_addr_list[0] != NULL)  
    11.         {  
    12.             // IPv4: Address is four bytes (32-bit)  
    13.             if ( hp->h_length < 4)  
    14.                 return false;  
    15.   
    16.             // Convert address to . format  
    17.             strHost[0] = 0;  
    18.   
    19.             // IPv4: Create Address string  
    20.             sprintf(strHost, "%u.%u.%u.%u",  
    21.                 (UINT)(((PBYTE) hp->h_addr_list[0])[0]),  
    22.                 (UINT)(((PBYTE) hp->h_addr_list[0])[1]),  
    23.                 (UINT)(((PBYTE) hp->h_addr_list[0])[2]),  
    24.                 (UINT)(((PBYTE) hp->h_addr_list[0])[3]));  
    25.   
    26.             strAddress = strHost;  
    27.             return true;  
    28.         }  
    29.     }  
    30.     else  
    31.         SetLastError(ERROR_INVALID_PARAMETER);  
    32.   
    33.     return false;  
    34. }  

    这种方法有一个弊端,就是只能获取一个网卡的ip地址,而且当你的机器上装有以太网卡和无线网卡,它优先获取的是无线网卡的地址。


    第二种做法可以获取多个网卡的IP地址,代码如下:

    [cpp]  view plain  copy
      在CODE上查看代码片 派生到我的代码片
    1. #include <Iphlpapi.h>  
    2. #pragma comment(lib,"Iphlpapi.lib") //需要添加Iphlpapi.lib库  
    3.   
    4. bool CSocketComm::GetLocalAddress()  
    5. {  
    6. std::string strAddress;  
    7. int nCardNo = 1;  
    8.     //PIP_ADAPTER_INFO结构体指针存储本机网卡信息  
    9.     PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();  
    10.     //得到结构体大小,用于GetAdaptersInfo参数  
    11.     unsigned long stSize = sizeof(IP_ADAPTER_INFO);  
    12.     //调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量  
    13.     int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);  
    14.     //记录网卡数量  
    15.     int netCardNum = 0;  
    16.     //记录每张网卡上的IP地址数量  
    17.     int IPnumPerNetCard = 0;  
    18.     if (ERROR_BUFFER_OVERFLOW == nRel)  
    19.     {  
    20.         //如果函数返回的是ERROR_BUFFER_OVERFLOW  
    21.         //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小  
    22.         //这也是说明为什么stSize既是一个输入量也是一个输出量  
    23.         //释放原来的内存空间  
    24.         delete pIpAdapterInfo;  
    25.         //重新申请内存空间用来存储所有网卡信息  
    26.         pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];  
    27.         //再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量  
    28.         nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);      
    29.     }  
    30.     if (ERROR_SUCCESS == nRel)  
    31.     {  
    32.         //输出网卡信息  
    33.         //可能有多网卡,因此通过循环去判断  
    34.         while (pIpAdapterInfo)  
    35.         {  
    36.             //可能网卡有多IP,因此通过循环去判断  
    37.             IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);  
    38.             switch(pIpAdapterInfo->Type)  
    39.             {  
    40.             case MIB_IF_TYPE_OTHER:  
    41.             case MIB_IF_TYPE_ETHERNET:  
    42.             case MIB_IF_TYPE_TOKENRING:  
    43.             case MIB_IF_TYPE_FDDI:  
    44.             case MIB_IF_TYPE_PPP:  
    45.             case MIB_IF_TYPE_LOOPBACK:  
    46.             case MIB_IF_TYPE_SLIP:  
    47.                 {  
    48.                     strAddress = pIpAddrString->IpAddress.String;  
    49.                // 需要注意的是有时可能获取的IP地址是0.0.0.0,这时需要过滤掉  
    50.                     if(std::string("0.0.0.0")==strAddress)  
    51.                         break;  
    52.            std::cout<<_T("第")<< nCardNo<<_T("张网卡的IP地址是")<< strAddress<<std::endl;  
    53.                      nCardNo++;  
    54.                      break;  
    55.                 }  
    56.             default:  
    57.                 // 未知类型网卡就跳出  
    58.                 break;  
    59.             }  
    60.             pIpAdapterInfo = pIpAdapterInfo->Next;  
    61.         }  
    62.     }  
    63.     //释放内存空间  
    64.     if (pIpAdapterInfo)  
    65.     {  
    66.         delete pIpAdapterInfo;  
    67.     }  
    68. }  
    展开全文
  • C# 获取本地IP地址以及MAC地址C# 获取本地IP地址以及MAC地址
  • WPF 获取本地IP地址

    2019-09-26 21:22:40
    /// <summary> /// 获取本地IP地址信息 /// </summary> void GetAddressIP() { ///获取本地IP地址 string AddressIP = string.Empty; ...
  • vs2015获取本地IP地址

    千次阅读 2016-07-12 17:11:19
    VS2015下调试获取本地IP,出现错误warning C4996: 'gethostbyname': Use getaddrinfo() or GetAddrInfoW() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API ...
  • 本地IP易语言源码

    2018-12-08 13:55:02
    可以获取本地IP地址,并且无需任何的附件 可以获取本地IP地址,并且无需任何的附件 可以获取本地IP地址,并且无需任何的附件
  • PB9.0 获取本地ip地址

    2015-11-24 16:26:37
    pb9.0 测试通过.pb 11 pb 12.5
  •  * 1、获取本地IP地址  * 2、获取本机的服务器名称  * 3、获取远程服务器的主机IP地址  * 4、获取远程服务器的所有主机IP  *  * 网络编程:  * InetAddress 是用来封装IP地址相关信息的类  * ...
  • js获取本地ip地址

    千次阅读 2018-07-09 18:10:05
    获取客户端IP[利用搜狐接口]&lt;script src="http://pv.sohu.com/cityjson?ie=utf-8"&gt;&lt;/script&gt; &lt;script type="text/javascript"&gt; document.write...
  • 获取本地IP

    2008-08-19 14:47:52
    获取本地IP的代码 和读取数据到数据库
  • Lua获取本地IP地址

    万次阅读 2015-09-24 18:08:59
    如何通过Lua脚本获取本机的IP地址,需要用到socket.lua脚本。看官方帮助文档,觉得直接使用是没什么问题,直接使用”socket”服务也没问题,但系统一直提示缺少东西,很是让人烦,刚接触又不那么了解,真是棘手。...
  • 服务器获取本地Ip地址

    千次阅读 2013-06-22 16:42:10
    在很多时候需要得到本地Ip地址,又没有配置文件可以读取,可以用下面了这个函数来获得:string getLocalIp() { char ip[128] = {0}; char buff[BUFSIZ]; struct ifconf conf; conf.ifc_len = BUFSIZ; conf....
  • BCB获取本地IP地址

    2011-05-19 23:42:54
    gethostbyname以及BCB Key的转换
  • jq 获取本地ip地址

    千次阅读 2019-11-22 18:28:19
    1、引入下面的代码,将代码放到HTML文档的head中 <...</script> 2、当页面加载完成后,打印window对象,找到returnCitySN,这个就是我们需要的数据 var ip = window.returnCitySN.cip console.lo...
  • IP地址是IP使用的32位(IPv4)或者128位(IPv6)位无符号数字,它是传输层协议TCP,UDP的基础。InetAddress是Java对IP地址的封装,在java.net中有许多类都使用到了InetAddress, 包括ServerSocket,Socket,...
  • Linux:获取本地IP地址、子网掩码、广播地址: 最近有个项目需求需要得到自己的广播地址从而发给在同一广播域的其他设备,在网上查找了一些资料,可以调用驱动接口获取。我设备有三个ip接口:eth0、eth1、和回环...
  • #设置读取文件路径,模式为只读 f=open("/home/rocketeer/datafile/hosts.txt","r") #设置输出文件路径,模式为追加写入 output=open('/home/rocketeer/datafile/newhosts.txt','w+') #循环得到文件中的每一行内容,...
  • 首先创建一个本地文件config.ini,是.ini格式的配置文件,值不用加引号,读取过去就是字符串格式 ...读取本地配置文件用了个django自带的模块:configparser 在settings.py 中设置如下,按照相对路径取
  • 积累go获取本地ip地址

    千次阅读 2017-06-13 15:09:41
    func getLocalIp() { addrSlice, err := net.InterfaceAddrs() if nil != err { log.Error("Get local IP addr failed!!!") IpAddr = "localhost" return } for _, addr := range addrSlice { if ipnet,
  • 因为涉及兼容性问题,可以通过req.header(‘x-forwarded-for’)与req.connection.remoteAddress来获取IP地址,下面是封装好的一个函数: function getClientIp(req) { var ipAddress; var forwardedIpsStr = req....
  • C语言实现读取本机网卡地址和IP地址,可以帮助初学者快速的掌握基本的操作
  • 在安卓开发时 ,有时候需要用手机访问本地服务器,如读取一些本地服务器上的数据,用电脑上的地址去读取会发现读不到数据,因为...这时要在手机中把127.0.0.1或localhost替换为电脑的IP地址(手机与电脑在同一局域网)
  • 易语言的取本地ip和本机ip的源码!希望大家理解!

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 209,541
精华内容 83,816
关键字:

怎么读取本地ip