首页 > 解决方案 > python程序中试图找出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:]


编译器告诉我第 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:]

标签: pythonipip-address

解决方案


我认为您在 GEOIP 和 STANDARD 之间缺少下划线。

用这个替换第 9 行应该可以解决问题:

gi = GeoIP.open("GeoLiteCity.dat",GeoIP.GEOIP_STANDARD)

编辑:

如其中一条评论所述,是否还有其他地方省略了下划线;那应该可以解决问题。


推荐阅读