Linux下Python获取IP地址的代码
《lnmp一键安装包》中需要获取ip地址,有2种情况:如果服务器只有私网地址没有公网地址,这个时候获取的IP(即私网地址)不能用来判断服务器的位置,于是取其网关地址用来判断服务器在国内还是国外(脚本为了使国内用户快速下载,yum源自动设置成163,这个情况就需要获取网关地址);如果服务器有公网地址,这时获取的IP地址可用来直接判断服务器地理位置。
获取服务器IP,如果有公网地址就取公网地址,没有公网地址就取私网网址
下面是之前我用shell来获取本地IP脚本:
IP=`ifconfig|grep'inetaddr:'|cut-d:-f2|grep-v^10\.|grep-v^192\.168|grep-v^172\.|\ grep-v^127\.|awk'{print$1}'|awk'{print;exit}'` [!-n"$IP"]&&IP=`ifconfig|grep'inetaddr:'|cut-d:-f2|grep-v^127\.|\ awk'{print$1}'|awk'{print;exit}'`
Python版:get_local_ip.py:
#!/usr/bin/envpython importsocket defGet_local_ip(): """ Returnstheactualipofthelocalmachine. Thiscodefiguresoutwhatsourceaddresswouldbeusedifsometraffic weretobesentouttosomewellknownaddressontheInternet.Inthis case,aGoogleDNSserverisused,butthespecificaddressdoesnot mattermuch.Notrafficisactuallysent. """ try: csock=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) csock.connect(('8.8.8.8',80)) (addr,port)=csock.getsockname() csock.close() returnaddr exceptsocket.error: return"127.0.0.1" if__name__=="__main__": local_IP=Get_local_ip() printlocal_IP
有公网地址直接获取,没有公网地址就获取网关地址(用于判断IP地址的地理位置):get_public_ip.py
#!/usr/bin/envpython importre,urllib2 classGet_public_ip: defgetip(self): try: myip=self.visit("http://www.whereismyip.com/") except: try: myip=self.visit("http://www.ip138.com/ip2city.asp") except: myip="Sosorry!!!" returnmyip defvisit(self,url): opener=urllib2.urlopen(url) ifurl==opener.geturl(): str=opener.read() returnre.search('\d+\.\d+\.\d+\.\d+',str).group(0) if__name__=="__main__": getmyip=Get_public_ip() printgetmyip.getip()
判断服务器IP地理位置:get_ip_area.py
#!/usr/bin/envpython #coding:utf-8 try: importsys,urllib2,json apiurl="http://ip.taobao.com/service/getIpInfo.php?ip=%s"%sys.argv[1] content=urllib2.urlopen(apiurl).read() data=json.loads(content)['data'] code=json.loads(content)['code'] ifcode==0: printdata['country_id'] else: printdata except: print"Usage:%sIP"%sys.argv[0]