首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

麻烦大家帮忙修改下 关于python获取IP的代码…谢谢

2013-04-26 
麻烦大家帮忙修改下 关于python获取IP的代码……多谢import httplib, urllibimport socketimport timeparams

麻烦大家帮忙修改下 关于python获取IP的代码……多谢


import httplib, urllib
import socket
import time

params = dict(
    login_email="XXXX", # 替换为DNSPOD账号
    login_password="XXXXX", # 替换为DNSPOD密码
    format="json",
    domain_id=XXXX, # 填写Domain ID   
    record_id=XXXXXXXXXX, # 填写Record ID
    sub_domain="nas", # 填写二级域名
    record_line="默认",
)
current_ip = None

def ddns(ip):
    params.update(dict(value=ip))
    headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/json"}
    conn = httplib.HTTPSConnection("dnsapi.cn")
    conn.request("POST", "/Record.Ddns", urllib.urlencode(params), headers)
    
    response = conn.getresponse()
    print response.status, response.reason
    data = response.read()
    print data
    conn.close()
    return response.status == 200

def getip():
    sock = socket.create_connection(('ns1.dnspod.net', 6666))
    ip = sock.recv(16)
    sock.close()
    return ip

if __name__ == '__main__':
    while True:
        try:
            ip = getip()
            print ip
            if current_ip != ip:
                if ddns(ip):
                    current_ip = ip
        except Exception, e:
            print e
            pass
        time.sleep(30)


我知道大概是什么意思 就是获取当前IP 然后通过api写入一个地址

关键问题是 现在获取IP这个部分

有点问题 麻烦大家帮忙看看 修改下 多谢
1.现在获取的IP  是我本机的真实IP地址
我通过http://www.yougetsignal.com/tools/open-ports/  也可以查询到

但是   因为我使用小区宽带  上面这个IP 地址是真实的地址 ,但是实际上 小区通过路由什么的 应该是重新分配了个IP给我

重新分配的IP  通过  http://www.ip138.com   可以查询到

我的问题是,如何将上面代码中获取真实IP的方法 换成ip138这种获取的IP呢?

多谢大家
[解决办法]
我还没接触,目前提不出具体代码
但你搜搜 HTTP_X_FORWARDED_FOR 相关文章,抓proxy后的ip肯定离不开这个参数

[解决办法]
你在小区内的是局域网或广域网
通过运营商的NAT接入到公网里
所以你应该了解下什么是NAT 
你可以调用在公网上的如ip138的接口去获取你本地通过NAT映射出的真正IP
[解决办法]
不好意思我这里看到的都是公网ip,估计ip138与你同属一个内网里...

Python 3.3.1 (v3.3.1:d9893d13c628, Apr  6 2013, 20:30:21) [MSC v.1600 64 bit (AMD64)] on win32


Type "copyright", "credits" or "license()" for more information.
>>> import http.client
>>> conn = http.client.HTTPConnection("iframe.ip138.com")
>>> conn.request("GET", "/ic.asp")
>>> res = conn.getresponse()
>>> res.read()
b'<html>\r\n<head>\r\n<meta http-equiv="content-type" content="text/html; charset=gb2312">\r\n<title> \xc4\xfa\xb5\xc4IP\xb5\xd8\xd6\xb7 </title>\r\n</head>\r\n<body style="margin:0px"><center>\xc4\xfa\xb5\xc4IP\xca\xc7\xa3\xba[113.73.231.9] \xc0\xb4\xd7\xd4\xa3\xba\xb9\xe3\xb6\xab\xca\xa1\xd6\xd0\xc9\xbd\xca\xd0 \xb5\xe7\xd0\xc5</center></body></html>'
>>> import socket
>>> s = socket.socket(socket.AF_INET,socket. SOCK_STREAM)
>>> s.connect(("ns1.dnspod.net", 6666))
>>> s.recv(1024)
b'113.73.231.9'
>>>

热点排行