首页 > 代码库 > Linux——获取IP及其中发现的问题

Linux——获取IP及其中发现的问题

由于最近在学习网络编程,喜欢玩弄IP地址。

首先,我需要搞清楚如何获得本机IP。

1、利用Linux系统

在bash中输入ifconfig可获得以下代码:

(ev1)[root@Simonxu bin]# ifconfiglo        Link encap:Local Loopback            inet addr:127.0.0.1  Mask:255.0.0.0          inet6 addr: ::1/128 Scope:Host          UP LOOPBACK RUNNING  MTU:16436  Metric:1          RX packets:8647 errors:0 dropped:0 overruns:0 frame:0          TX packets:8647 errors:0 dropped:0 overruns:0 carrier:0          collisions:0 txqueuelen:0           RX bytes:1768577 (1.6 MiB)  TX bytes:1768577 (1.6 MiB)ppp0      Link encap:Point-to-Point Protocol            inet addr:121.249.203.104  P-t-P:192.168.100.1  Mask:255.255.255.255          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1492  Metric:1          RX packets:773361 errors:0 dropped:0 overruns:0 frame:0          TX packets:693122 errors:0 dropped:0 overruns:0 carrier:0          collisions:0 txqueuelen:3           RX bytes:956180205 (911.8 MiB)  TX bytes:74066832 (70.6 MiB)p4p1      Link encap:Ethernet  HWaddr 14:FE:B5:C5:CB:0B            inet6 addr: 2001:da8:7013:d129:16fe:b5ff:fec5:cb0b/64 Scope:Global          inet6 addr: fe80::16fe:b5ff:fec5:cb0b/64 Scope:Link          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1          RX packets:1681710 errors:0 dropped:0 overruns:0 frame:0          TX packets:710030 errors:0 dropped:0 overruns:0 carrier:0          collisions:0 txqueuelen:1000           RX bytes:1087076647 (1.0 GiB)  TX bytes:91505807 (87.2 MiB)          Interrupt:39 Base address:0x4000 wlan0     Link encap:Ethernet  HWaddr AC:72:89:71:B5:74            inet6 addr: fe80::ae72:89ff:fe71:b574/64 Scope:Link          UP BROADCAST MULTICAST  MTU:1500  Metric:1          RX packets:39 errors:0 dropped:0 overruns:0 frame:0          TX packets:39 errors:0 dropped:0 overruns:0 carrier:0          collisions:0 txqueuelen:1000           RX bytes:5265 (5.1 KiB)  TX bytes:6045 (5.9 KiB)

从ppp0(point-to-point)网络可查看到IP地址为121.249.203.104。

2、利用python语言获得本机IP

Python 3.3.3 (default, Sep  6 2014, 10:53:40) [GCC 4.4.6 20120305 (Red Hat 4.4.6-4)] on linuxType "help", "copyright", "credits" or "license" for more information.>>> import socket>>> print(socket.gethostbyname(socket.gethostname()))219.146.13.36

可知本机IP地址为219.146.13.36。

3、奇怪的是,利用如下代码建立与任意http主机的socket套接口连接

import socketimport sysport=80host="www.zhihu.com"]sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)sock.connect((host,port))print(sock.getsockname(),sock.getpeername())
sock.getsockname(),sock.getpeername()方法返回本次套接口连接的本地IP地址、端口;服务器的IP地址和端口。
(121.249.203.104, 44447) (60.28.215.71, 80)
121.249.203.104为本次套接口连接的本地IP。
60.28.215.71为天津市 联通IP。

本机IP到底是那个?未完待序。



Linux——获取IP及其中发现的问题