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

szgekko 2013-04-25 09:36:51

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呢?

多谢大家
...全文
336 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ImN1 2013-04-26
  • 打赏
  • 举报
回复
我还没接触,目前提不出具体代码 但你搜搜 HTTP_X_FORWARDED_FOR 相关文章,抓proxy后的ip肯定离不开这个参数
szgekko 2013-04-26
  • 打赏
  • 举报
回复
嗯 我看了下 ip138的 和另外一个却是不同 本来是想解决 nas系统外网访问的问题 刚把域名直接解析到 ip138分配的地址 也没法访问 估计就是楼上说过的NAT 的问题 看样子 这个问题是无解了……多谢 封贴了
angel_su 2013-04-26
  • 打赏
  • 举报
回复
不好意思我这里看到的都是公网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' >>>
szgekko 2013-04-26
  • 打赏
  • 举报
回复
引用 4 楼 angel_su 的回复:
ip138访问时获取的IP不就是公网ip嘛,你看到啥呢?跟ns1.dnspod.net返回的有啥不同?
感谢您的回复 首先 我在主楼也说了……我从ip138获取的不是公网的IP 真正的公网IP 我从主楼的另外一个查询链接里能获取 所以 我现在想获取 IP138获取的IP地址 也就是 运营商分配给我的地址 不知道有没有方法呢
angel_su 2013-04-26
  • 打赏
  • 举报
回复
ip138访问时获取的IP不就是公网ip嘛,你看到啥呢?跟ns1.dnspod.net返回的有啥不同?
szgekko 2013-04-26
  • 打赏
  • 举报
回复
引用 2 楼 openXMPP 的回复:
你在小区内的是局域网或广域网 通过运营商的NAT接入到公网里 所以你应该了解下什么是NAT 你可以调用在公网上的如ip138的接口去获取你本地通过NAT映射出的真正IP
感谢您的回复 是这样的 其实 我是想获取 ip138访问时获取的IP 而不是真正的公网IP……
乔巴好萌 2013-04-26
  • 打赏
  • 举报
回复
你在小区内的是局域网或广域网 通过运营商的NAT接入到公网里 所以你应该了解下什么是NAT 你可以调用在公网上的如ip138的接口去获取你本地通过NAT映射出的真正IP

37,720

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧