Python을 사용하면 매우 간단한 방법으로 로컬 IP 주소를 얻을 수 있습니다. 그러나 Windows와 Linux에서의 방법은 약간 다릅니다.
Windows 방법에서 IP 주소 얻기
방법 1: 소켓 모듈 사용
전화 접속 인터넷을 사용하는 경우 일반적으로 로컬 IP와 외부 IP를 사용할 수 있습니다. Python을 사용하여 쉽게 수행할 수 있습니다. 이 두 IP를 얻으려면 gethostbyname 및 gethostbyname_ex 두 함수를 사용하여
#使用socket模块 import socket #得到本地ip localIP = socket.gethostbyname(socket.gethostname()) print"local ip:%s "%localIP ipList = socket.gethostbyname_ex(socket.gethostname())for i in ipList: if i != localIP: print"external IP:%s"%i
또는
#引入socket模块 import socket myname = socket.getfqdn(socket.gethostname()) myaddr = socket.gethostbyname(myname)
을 달성합니다. 방법 2는 정규 표현식을 사용하고 urllib2 모듈은
입니다. 🎜>이 방법은 공인 IP를 얻기 위해 다른 웹사이트에서 제공하는 IP 탐지 기능을 사용한 뒤, Python을 이용해 페이지를 크롤링하면 정규 매칭을 획득하게 됩니다. 하지만 이 방법이 더 정확합니다
import re,urllib2 from subprocess import Popen, PIPE print "本机的私网IP地址为:" + re.search('\d+\.\d+\.\d+\.\d+',Popen('ipconfig', stdout=PIPE).stdout.read()).group(0) #利用其他网站提供的接口,使用urllib2获取其中的ip print "本机的公网IP地址为:" +re.search('\d+\.\d+\.\d+\.\d+',urllib2.urlopen("http://www.ip138.com").read()).group(0)
Linux에서 IP 주소를 얻는 방법
위의 방법 Linux에서도 사용할 수 있습니다. 또한 Linux에서는 다음 방법을 사용하여 로컬 IP 주소를 얻을 수도 있습니다.
import socket import fcntl import struct def get_ip_address(ifname): skt = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) print skt pktString = fcntl.ioctl(skt.fileno(), 0x8915, struct.pack('256s', ifname[:15])) print pktString ipString = socket.inet_ntoa(pktString[20:24]) print ipString return ipString print get_ip_address('lo') print get_ip_address('eth1')