【Win 10 应用开发】获取本机的IP地址

按照老规矩,也是朋友的建议,老周今天在吹牛之前,先讲一个小故事。

有朋友问我,老周,你现在还发短信吗,你每个月用多少电话费?唉,实话说,现在真的发短信不多了,套餐送的130条短信,每月都发不了一条。至于电话费嘛,基本上是交月租,通话费用可能平均不到1块钱,多的可能就几块钱。老周的单次通话时间一般不会长,长达半小时的通话也是偶然发生,多数情况下就说几句话而已,别说废话,长话短说,说完挂机。

有人会问,那如果要多聊一会儿呢,那就开聊天工具,聊语音。反正用的是光纤包年,多说几句废话也不花钱。

该省的钱就省,老周向来有钱也不随便花,该用则用,把钱拿出来去买些可以增值的收藏品,或者搞些风险不太大的投资也不错。很多时候,老周宁可买个工艺品放在书桌上,也不会去买电影票。想想买张电影票,看一两个小时就完了,什么都没留下,再说了,近些年来烂片太多了,现在的导演编剧演员们,艺术修养太低,尽拍些挑战智商底线的片子,看这种电影根本不值,这些鬼片顶多值1分钱。我还不如买些有层次有品位的东西摆在家里,我还可以天天看。

===============================================================

好,故事讲完了,咱们说正经话,今天说说在UWP应用中怎么获取本机的IP地址。我不记得以前有没有写过类似的文章,也不知道别人有没有写过,如果你懂了,就不用看下文了,你就当老周扯了废话就行了。

老周写博客向来很随意,绝对不严肃,不是老周对待知识不认真,而是老周性情如此,从来不喜欢过多的约束,因此,与其说是博文,不如说是随笔,就是随意下笔,只要不伤大雅就好。

在Windows.Networking.Connectivity命名空间下,有一个类叫NetworkInformation,它有个静态的公共方法叫GetHostNames,调用它就可以获取本机的机器名了。

有朋友会说了,这真TMD太简单了,别高兴得太早,你用了就知道了。方法调用是简单,然而它返回的是N个HostName实例,这可就有点XX了,多个HostName,我到底要选用哪个?

先看看,HostName类有个Type属性,它是一个HostNameType枚举值,如果是计算机名(比如“MyPC”),类型就为DomainName,如果是蓝牙网卡上的地址,则为Bluetooth,如果是IP地址,有两个值——Ipv4和Ipv6。

在多数情况下,都会用IP地址,所以你会想到,当调用 NetworkInformation.GetHostNames() 方法得到HostName列表后,可以用其Type属性来筛选出表示IP地址的Hostname实例。现在用得多的是v4的IP地址,如192.168.0.20。

好,第一个问题解决了,然而新问题来了,我虽然筛选出了表示IP的主机名,但是,我想用的是通过Wi-Fi连接的IP地址,那怎么办呢?

没事,咱们接着分析。当你确认了某个HostName对象是IP地址表示时,可以访问它的IPInformation属性,这时你会得到一个IPInformation实例。

随后,你会发现,IPInfomation类有个NetworkAdapter属性,访问它,获得一个NetworkAdapter实例。这个NetworkAdapter实例表示的是这个主机名所代表连接的网络适配器的信息,你不妨理解为就是连接了网络的那个网卡(当然包括无线网卡)。

接着,你又发现,NetworkAdapter类有个属性叫IanaInterfaceType,它是一个int类型。

现在,你离真相只有一步之遥了。这个整数值你可别小看它,它可以用来标识网络接口类型。这些值在MSDN上都有,为了大家省事,我就抄了一部分下来,请看:

6 —— 以太网;

23 —— PPP 网络接口(专用名词,可以网上搜,了解一下就行了,不用死记);

24 —— 软件回环接口;

37 —— ATM 网络接口;

71 —— 无线网络接口(这个是重点);

1 —— 其他接口。

要判断是否为无线网络接口,你就看它是不是71就好了。

至此,相信大家心中的疑问都消散得差不多了,不知道老周这样讲解,你懂否?

不扯了,可以上代码了。

            // 获取本地主机名称列表
            var hosts = NetworkInformation.GetHostNames();
            // 筛选无线或以太网
            var host = hosts.FirstOrDefault(h =>
             {
                 bool isIpaddr = (h.Type == Windows.Networking.HostNameType.Ipv4) || (h.Type == Windows.Networking.HostNameType.Ipv6);
                 // 如果不是IP地址表示的名称,则忽略
                 if (isIpaddr == false)
                 {
                     return false;
                 }
                 IPInformation ipinfo = h.IPInformation;
                 // 71表示无线,6表示以太网
                 if (ipinfo.NetworkAdapter.IanaInterfaceType == 71 || ipinfo.NetworkAdapter.IanaInterfaceType == 6)
                 {
                     return true;
                 }
                 return false;
             });
            if (host != null)
            {
                tb.Text = host.DisplayName; //显示IP
            }

运行的结果如下图所示。

好了,这次的内容就说到这里了,改天,和大家聊聊跟 Socket 有关的话题。

示例源代码下载地址

时间: 2024-07-28 21:45:52

【Win 10 应用开发】获取本机的IP地址的相关文章

python基础项目实战:获取本机所有IP地址的方法

前言 今天为大家介绍一个利用python获取本机所有IP地址的具体代码,具有一定的参考价值,希望能够帮助到大家,代码如下: 导入第三方库 查看主机名 主机IP 大家在学python的时候肯定会遇到很多难题,以及对于新技术的追求,这里推荐一下我们的Python学习扣qun:784758214,这里是python学习者聚集地!!同时,自己是一名高级python开发工程师,从基础的python脚本到web开发.爬虫.django.数据挖掘等,零基础到项目实战的资料都有整理.送给每一位python的小伙

获取本机的IP地址(局域网)与主机名称

编写内容保存为bat @echo off &setlocal enabledelayedexpansion Rem '/*========获取本机的IP地址(局域网)=========*/ echo "please wait" for /f "tokens=2 delims=:" %%b in ('ipconfig^|find /i "ip"') do set fsip=%%b echo %fsip% set CT=%computerna

获取本机的IP地址和mac地址

1. 以前一直用ipconfig来查看ip地址,哈哈哈,现在发现挺好玩 #获取本机的IP地址和mac地址 import uuid import socket def get_mac_address(): mac=uuid.UUID(int = uuid.getnode()).hex[-12:] #print(mac) return ":".join([mac[e:e+2] for e in range(0,11,2)]) #range(0,11,2):在[0:11]取值,间隔为2 de

怎样获取本机的ip地址

首先介绍一下用到的结构体 struct hostent { const char *h_name; // official name of host char **h_aliases; // alias list short h_addrtype; // host address type short h_length; // length of address char **h_addr_list; // list of addresses from name server #define h

Java获取本机的ip地址

说到获取ip地址,有人可能会想到,直接用InetAddress.getLocalHost().getHostAddress().实际上这个是不对的,因为一台机器上可能有多个网络接口(一般指网卡或者虚拟网卡),因此也就有多个ip地址,所以我们需要列出所有的网络接口及其对应的ip地址.代码如下: public static void main(String[] args) throws Exception { Enumeration<NetworkInterface> netInterfaces

用Python获取本机的IP地址

Linux import socketimport fcntlimport structdef get_ip_address(ifname): s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) return socket.inet_ntoa(fcntl.ioctl( s.fileno(), 0x8915, # SIOCGIFADDR struct.pack('256s', ifname[:15]) )[20:24]) #get_ip_add

Linux云主机获取本机公网IP地址

因为公司的云主机使用ifconfig和ip add命令都只能看到内网IP地址,而脚本里面又需要获取公网IP地址进行一些动作: # ip ad 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN      link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00     inet 127.0.0.1/8 scope host lo     inet6 ::1/12

linux 获取本机MAC/IP地址的方法

功能:查询本机IP/MAC地址,过滤掉127.0.0.1 loop-back 地址 适用:linux, ubuntu 16.04 调试通过 #include <stdlib.h>#include <stdio.h>#include <unistd.h>#include <string.h>#include <errno.h>#include <sys/types.h>#include <sys/stat.h>#includ

python获取本机局域网IP地址(适用于Windows、Linux、Mac)

1 import socket 2 import platform 4 5 def getip(): 6 try: 7 s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 8 s.connect(('www.baidu.com', 0)) 9 ip = s.getsockname()[0] 10 except: 11 ip = "x.x.x.x" 12 finally: 13 s.close() 14 return ip 15 16