【发布时间】:2021-05-03 11:00:15
【问题描述】:
我在编码方面没有任何经验,但想让这段代码 sn-p 在这里工作:
import re
import sys
import json
import GeoIP
import urllib
import string
import requests
gi = GeoIP.open("GeoLiteCity.dat",GeoIP.GEOIP STANDARD)
r = requests.get('http://lichess.org/stream', stream=True)
buff = ''
pattern = re.compile(sys.argv[1] + '.{30}')
for content in r.iter content():
if content:
buff = buff + content
if len(buff) > 1000:
result keys = re.findall(pattern, buff)
for el in result keys:
result = string.split(el)
print result[0], result[1], result[2][:-8], gi.record by addr(result[2][:-8])['country name'],
gi.record by addr(result[2][:-8])['region name'], gi.record by addr(result[2][:-8])['city']
buff = buff[-30:]
编译器告诉我第 9 行中的语法无效,它显示的是 STANDARD。
我在名为 lichess.org 的国际象棋网站上查找了基于游戏 ID 的代码以找出用户的 IP 地址。考虑到这段代码是在 7 年前发布的,并且 lichess 改变了某些事情,我有点认为有必要进行一些更改。
我发现这个的线程的 OP 也给出了这个建议:
用法:getip.py owlc08je
getip.py 你的脚本名称,“owlc08je” - 游戏ID。如果有人在这个游戏中移动,他的 ip、国家和城市会打印到控制台。
但是,它不起作用。
提前致谢
带有下划线和更改的编辑代码:
import re
import sys
import json
import GeoIP
import urllib
import string
import requests
gi = GeoIP.open("GeoLiteCity.dat",GeoIP.GEOIP_STANDARD)
r = requests.get('http://lichess.org/stream', stream=True)
buff = ''
pattern = re.compile(sys.argv[1] + '.{30}')
for content in r.iter_content():
if content:
buff = buff + content
if len(buff) > 1000:
result_keys = re.findall(pattern, buff)
for el in result_keys:
result = string.split(el)
print(result[0], result[1], result[2][:-8], gi.record_by_addr(result[2][:-8])['country name'],
gi.record by addr(result[2][:-8])['region name'], gi.record by addr(result[2][:-8])['city'])
buff = buff[-30:]
【问题讨论】:
-
GeoIP.GEOIP STANDARD确实是无效的语法。如果您不了解 python 语法,请查看tutorial。 -
好吧,我相信,我可能已经明白问题出在哪里了:我复制和粘贴的帖子用下划线替换了所有空格。在将它们转换回来时,一些正确放置的下划线可能被意外删除了
标签: python ip ip-address