同步操作将从 didiplus/script 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
import requestsimport argparseimport jsondef query_ip_info(ip=None):"""查询IP地址的归属地信息:param ip: 要查询的IP地址,默认为None(查询本机公网IP):return: 包含查询结果的字典"""base_url = "http://ip-api.com/json/"target_url = f"{base_url}{ip}" if ip else base_url.rstrip('/')try:response = requests.get(target_url, params={'fields': '66846719'}) # 请求所有可用字段response.raise_for_status()data = response.json()if data['status'] == 'fail':return {'error': data['message']}return dataexcept requests.exceptions.RequestException as e:return {'error': f"网络请求错误: {str(e)}"}except json.JSONDecodeError:return {'error': "无效的API响应"}def format_output(data):"""格式化输出查询结果"""if 'error' in data:print(f"错误信息: {data['error']}")return# 中文字段映射fields = {'query': 'IP地址','status': '状态','country': '国家','countryCode': '国家代码','region': '地区代码','regionName': '地区名称','city': '城市','zip': '邮编','lat': '纬度','lon': '经度','timezone': '时区','isp': 'ISP服务商','org': '组织机构','as': 'AS信息','reverse': '反向解析','mobile': '移动网络','proxy': '代理','hosting': '托管服务'}print("IP归属地查询结果:")for key, zh_name in fields.items():value = data.get(key, 'N/A')if key in ['lat', 'lon'] and value != 'N/A':value = f"{value:.4f}"print(f"{zh_name:>8}:{value}")def main():parser = argparse.ArgumentParser(description="IP归属地查询工具")parser.add_argument('-i', '--ip', help="要查询的IP地址,不指定则查询本机公网IP")parser.add_argument('-j', '--json', action='store_true', help="显示完整JSON格式输出")args = parser.parse_args()result = query_ip_info(args.ip)if args.json:print(json.dumps(result, indent=2, ensure_ascii=False))else:format_output(result)if __name__ == "__main__":main()
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。