我正试图制作一个脚本,我可以管道IP地址,并让它返回地理IP位置。当我尝试这样做时,看起来它每次将每个IP地址拆分1个字符,并且在尝试运行iplookup()时失败

#!/usr/bin/env python
import sys
from geoip import geolite2
def iplookup(srcip):
    for ip in srcip:
            print(ip)
            try:
                    print(geolite2.lookup(ip))
            except:
                    print("oops")
                    pass


source = sys.stdin.read()
iplookup(source)

回显一个数据样本(将来我希望来自tail-f fast.log)命令,只提取IP地址
[root@suricata py]# echo "05/20/2015-15:57:34.607470 [**] [1:2020702:2] ET DOS Bittorrent User-Agent inbound - possible DDOS [**] [Classification: Attempted Denial of Service] [Priority: 2] {TCP} 8.8.8.8:2039 -> 1.1.1.1:80" | grep -oE '((1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.){3}(1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])' | python mygeoip.py
8
oops
.
oops
8
oops
.
oops
8
oops
.
oops
8
oops

等。。。

最佳答案

sys.stdin.read()给您一个字符串,如果您有逗号分隔的IP地址,请执行以下操作

source = sys.stdin.read()
for ip in source.split(","):
    print(geolite2.lookup(ip))

关于python - python sys.stdin.read()不需要的拆分,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30378504/

10-12 02:10