【问题标题】:Invalid syntax error in python program which tries to figure out an IPpython程序中试图找出IP的无效语法错误
【发布时间】: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


【解决方案1】:

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

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

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

编辑:

正如其中一个cmets中提到的,如果还有其他地方省略了下划线;这应该可以解决问题。

【讨论】:

  • 是的,感谢您的建议,我刚刚意识到并更改了所有明显缺失的下划线,但我仍然收到错误:['country name'] 第 21 行。语法错误箭头指向空格。将其切换为下划线并不能解决问题。有什么问题?
  • 你用的是什么版本的python?如果您有 python 3.x,请尝试将 print 语句括在括号中。例如。打印(结果[0]......[:-8]['city'])
  • 好的,我已经这样做了,但是它在“by”上给了我一个无效的语法错误,所以我在两边都添加了一些下划线,然后它说最后一个有语法错误城市方括号'])。
  • 您可以在问题中添加编辑后的代码吗?否则无法理解您在哪些地方添加了下划线,在哪些地方没有。
  • 当然,完成了(我删除了周围的下划线)
猜你喜欢
  • 2019-10-02
  • 1970-01-01
  • 1970-01-01
  • 2014-10-24
  • 1970-01-01
  • 2019-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多