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

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

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

1、利用Linux系统

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

(ev1)[root@Simonxu bin]# ifconfig
lo        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 linux
Type "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 socket
import sys

port=80
host="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到底是那个?未完待序。



郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。