今天在创建socket服务端的时候,用Python的socket查找本机IP地址。
方法:hostname=socket.gethostname()
host = socket.gethostbyname(hostbame)
后面打印下host,发现host竟然是我的PPP适配器的ip地址。这就让我很郁闷呢!
后面网上查了下,原来是自己查找的有问题,应该是调用socket.gethostbyname_ex()。
但根据官网资料显示,我们想要的真正本机IP地址应该是在host=socket.gethostbyname_ex(hostname)[2][1]。
socket.gethostbyname_ex()返回值是一个元组数据,第一个是计算机设备名,第二个一般为空数组,第三个是个数组[PPP适配器IP地址,本机IP地址]。所以我们要取值到socket.gethostbyname_ex()[2][1]。
一般查询本机的IP地址是通过在cmd中运行:ipconfig命令来得到的,但我们会经常发现不止一个IPv4地址,有PPP适配器的IP,无线局域网Wlan的IP,以太网适配器的IP...这些IP到底是什么意思,到底有什么区别呢?
PPP
PPP(point to point protocal)点对点协议:
它是用于串行接口的两台计算机的通信协议,是为了通过电话线连接计算机和服务器而彼此通信而制定的协议。网络服务提供商可以提供您点对点连接,这样提供商的服务器就可以响应您的请求,将您的请求接收并发送到网络上,然后将网络上的响应送回。PPP是使用IP协议,有时它被认为是tcp/ip协议族的一员。PPP协议可用于不同介质上包括双绞线,光纤和卫星传输的全双工协议,它使用HDLC进行包的装入。PPP协议既可以处理同步通信也可以处理异步通信,可以允许多个用户共享一个网络,又可以进行SLIP协议所没有的差错控制。
一般ppp分配的网址,都是32掩码的。也就是说,整个网段里只有你一个人,和其他人都是广播不可达。你发送的任何数据包都会送到缺省的吓一跳,也就是ppp对端。
###ppp适配器
ppp适配器一般不是硬件设备,而是一个逻辑的虚拟设备。
一般是ADSL等设备,接入网卡的时候,利用ppp协议控制ADSL的调制解调器。
其实ppp适配器就是一个用tcp/ip协议控制外部网络设备比如ADSL model的程序。是连接接入商用的,系统建立的宽带连接。
以太网
以太网是一种通信协议标准
以太网适配器
以太网适配器就是电脑上的网卡,它的功能是用来将电脑和ADSL适配器与电脑连接起来,ppp是给ADSL适配器设的,是将ADSL适配器通过电话线和电信的提供上网的电脑连接起来。
PPP适配器IP&以太网IP&无线网IP
①ppp适配器IP
是广域网地址,也就是别人可以追踪的地址。另外,那个地址本人改不了,是接入商动态分配给你的。除非你不拨号。
②以太网IP
③无线局域网IP
④总结:
a.不同宽卡有不同的IP,ppp适配器是猫;以太网适配器是局域网卡,有线连接;如果有无线网卡还会有无线网卡的IP,WiFi;
b.如果网卡没有联网,是不会分配IP的。