打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
[经验]Python获取本机IP(外网IP)的方法总结
今天碰到这个问题,用Python获得本地IP地址,首先想到用socket.gethostbyname,代码如下:
程序代码:
import socket
ip = socket.gethostbyname(socket.gethostname())
print ip

可惜这样并不完美,特别如果是ADSL拨号或者局域网上网会得到192.168.*.*这种内部IP。


好像Linux下面可以用:
程序代码:
import socket
import fcntl
import struct
def get_ip_address(ifname):
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    return socket.inet_ntoa(fcntl.ioctl(
        s.fileno(),
        0x8915,  # SIOCGIFADDR
        struct.pack('256s', ifname[:15])
    )[20:24])
print get_ip_address('lo')
print get_ip_address('eth0')
具体没试过,我主要写的是windows下面的应用,只能另寻他法。


找到一种windows和Linux下面通用的方法:
程序代码:
import re,urllib2
print re.search('\d+\.\d+\.\d+\.\d+',urllib2.urlopen("http://www.whereismyip.com").read()).group(0)
感觉有点山寨,访问专门显示自己IP的网站,然后采集它的内容,用正则分析提取出IP地址的字符串。
这样有个问题,如果访问的网站挂掉了,这程序就失灵了。


完美解决方案:
程序代码:
import re,urllib2
class Getmyip:
    def getip(self):
        try:
            myip = self.visit("http://www.ip138.com/ip2city.asp")
        except:
            try:
                myip = self.visit("http://www.bliao.com/ip.phtml")
            except:
                try:
                    myip = self.visit("http://www.whereismyip.com/")
                except:
                    myip = "So sorry!!!"
        return myip
    def visit(self,url):
        opener = urllib2.urlopen(url)
        if url == opener.geturl():
            str = opener.read()
        return re.search('\d+\.\d+\.\d+\.\d+',str).group(0)
getmyip = Getmyip()
localip = getmyip.getip()
print localip
用try尝试第一个网站,如果挂掉了继续尝试第二个,如果第二个也挂掉了就尝试第三个,总不能三个网站同时挂掉
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Python爬虫爬取百度搜索结果
python+httplib实现HTTP POST提交数据
《Python程序设计》第10章 网络编程
python 2.x和3.x的区别
python3抓取网页
Python爬虫实战三之实现山东大学无线网络掉线自动重连
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服