ip 位置信息查询,支持管道、文件、命令行参数三种输入方式
- 作者: CF虐菜高手
- 来源: 51数据库
- 2022-08-12
#!/usr/bin/env python
#-*-coding:utf-8-*-
"""
调用 淘宝 ip restful api 进行查询,
支持直接指定 ip 地址查询 ,
也支持读取文件按行解析查询地址
同时支持从管道读取数据进行查询
"""
import requests
import argparse
import sys
URL = "http://ip.taobao.com/service/getIpInfo.php?ip="
def query_ip_info(ip):
if not ip:
print 'argument shoud not be none'
return
url = URL + str(ip)
try:
r = requests.get(url, timeout=5)
except Exception as e:
print e
else:
data = r.json()
if data['code'] == 0:
data = data['data']
print ip, data['country'], "/", data['area'], "/", data['region'], "/", data['city'], "/", data['isp']
else:
print "查询失败: ", ip, data['data']
def parse_args():
parser = argparse.ArgumentParser()
parser.add_argument("-a", "--addr", help="输入单个 ip 地址进行查询")
parser.add_argument("-f", "--file", help="输入文件路径,从文件中按行进行解析读取数据")
parser.add_argument("-p", "--pipe", default=sys.stdin, const=sys.stdin, nargs="?", help="从管道中读取数据")
args = parser.parse_args()
if not any((args.addr, args.file, args.pipe)):
parser.print_usage()
sys.exit()
elif args.addr:
return ("addr", args.addr)
elif args.file:
return ("file", args.file)
else:
return ("pipe", sys.stdin)
def run():
source, ips = parse_args()
if source == "pipe":
for ip in sys.stdin:
query_ip_info(ip.strip())
elif source == "addr":
query_ip_info(ips)
elif source == "file":
try:
with open(ips, "r") as f:
while True:
ip = f.readline().strip()
if not ip:
break
query_ip_info(ip)
except Exception as e:
print e
else:
print "unknown error"
def test():
run()
if __name__ == "__main__":
test()
推荐阅读
热点文章
Discord.py(重写)on_member_update 无法正常工作
0
Discord.py 在 vc 中获取用户分钟数
0
discord.py 重写 |为我的命令出错
0
Discord.py rewrite 如何 DM 命令?
0
播放音频时,最后一部分被切断.如何解决这个问题?(discord.py)
0
在消息删除消息 Discord.py
0
如何使 discord.py 机器人私人/直接消息不是作者的人?
0
(Discord.py) 如何获取整个嵌入内容?
0
Discord bot 尽管获得了许可,但不能提及所有人
0
Discord.py discord.NotFound 异常
0
