| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 16351 人关注过本帖
标题:[经验]Python获取本机IP(外网IP)的方法总结
只看楼主 加入收藏
静夜思
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:济南的冬天
等 级:管理员
威 望:11
帖 子:8913
专家分:2567
注 册:2004-3-25
结帖率:100%
收藏
 问题点数:0 回复次数:3 
[经验]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((
        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.").read()).group(0)
感觉有点山寨,访问专门显示自己IP的网站,然后采集它的内容,用正则分析提取出IP地址的字符串。
这样有个问题,如果访问的网站挂掉了,这程序就失灵了。


完美解决方案:
程序代码:
import re,urllib2
class Getmyip:
    def getip(self):
        try:
            myip = self.visit("http://www.")
        except:
            try:
                myip = self.visit("http://www.")
            except:
                try:
                    myip = self.visit("http://www.")
                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尝试第一个网站,如果挂掉了继续尝试第二个,如果第二个也挂掉了就尝试第三个,总不能三个网站同时挂掉
搜索更多相关主题的帖子: 获取 经验 Python 
2010-03-02 20:49
winboy
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2010-6-28
收藏
得分:0 
学习了··谢谢楼主
2010-06-28 21:39
qq475285576
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2011-5-2
收藏
得分:0 
楼主强大 啊  
2011-11-23 10:29
x88484532
Rank: 2
等 级:论坛游民
帖 子:34
专家分:30
注 册:2010-8-5
收藏
得分:0 
不错,学习了
2012-06-14 14:29
快速回复:[经验]Python获取本机IP(外网IP)的方法总结
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023156 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved