### Python 实现获取IP归属地信息 #### 一、引言 随着互联网技术的发展,IP地址作为网络设备的唯一标识,对于网络安全管理、数据分析等方面具有重要意义。了解IP地址的归属地可以帮助我们更好地进行网络监控、攻击溯源等工作。本文将详细介绍如何使用Python语言编写程序来获取IP地址的归属地信息,并提供一个具体的示例代码。 #### 二、基础知识介绍 在开始编写代码前,我们需要了解一些基础知识: 1. **API(Application Programming Interface)**:应用程序编程接口,用于不同软件之间相互通信的一种约定。 2. **HTTP 请求**:超文本传输协议请求,是一种用于从Web服务器获取资源的标准方法。 3. **JSON(JavaScript Object Notation)**:一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。 4. **CSV 文件**:逗号分隔值文件,是一种常用的文件格式,用于存储表格数据。 #### 三、API 选择 在本示例中,我们将使用 `https://freegeoip.net/` 提供的免费 API 来获取 IP 地址的地理位置信息。该 API 可以返回 IP 地址对应的国家名、城市名等信息。 #### 四、Python 实现 接下来,我们将逐步介绍如何使用 Python 来实现这一功能。 ##### 4.1 准备工作 确保安装了必要的库,如 `requests` 和 `csv`。可以通过以下命令安装 `requests`: ```bash pip install requests ``` ##### 4.2 代码实现 下面是一个简单的脚本,用于从文件中读取 IP 地址列表,并调用 API 获取每个 IP 的地理位置信息。 ```python #!/usr/bin/env python import requests import csv def getIp(file): iplist = [] with open(file, 'r') as fi: for ip in fi: ip = ip.strip() iplist.append(ip) return iplist def get_geolocation(ip): r = requests.get('https://freegeoip.net/json/' + ip) info = [str(r.json()['country_name']), str(r.json()['city'])] return {'ip': ip, 'country_name': info[0], 'city_name': info[1]} if __name__ == '__main__': iplist = getIp('/root/ipfile') with open('outputinfo.csv', 'a+', newline='') as f: fieldnames = ['ip', 'country_name', 'city_name'] dict_writer = csv.DictWriter(f, fieldnames=fieldnames) if f.tell() == 0: # Check if the file is empty dict_writer.writeheader() for ip in iplist: data = get_geolocation(ip) dict_writer.writerow(data) ``` **代码解释**: 1. `getIp()` 函数:从指定文件中读取 IP 地址并返回一个列表。 2. `get_geolocation()` 函数:发送 HTTP GET 请求到 API,获取 JSON 响应,并解析出 IP 的地理位置信息。 3. 主函数:遍历 IP 地址列表,调用 `get_geolocation()` 函数获取地理位置信息,并将其写入 CSV 文件。 #### 五、额外示例代码 下面是一段网友提供的示例代码,用于查找单个或多个 IP 地址的归属地信息。 ```python #!/usr/bin/env python # -*- coding:utf-8 -*- # 查找IP地址归属地 # writer by keery_log # Create time: 2013-10-30 # Last update: 2013-10-30 # 用法: python chk_ip.py www.google.com | python chk_ip.py 8.8.8.8 | python chk_ip.py ip.txt import signal import urllib.request import json import sys import re url = "http://ip.taobao.com/service/getIpInfo.php?ip=" # 淘宝提供的免费 API def ip_location(ip): data = urllib.request.urlopen(url + ip).read().decode('utf-8') datadict = json.loads(data) if datadict.get("code") == 0: return datadict["data"]["country"] + datadict["data"]["region"] + datadict["data"]["city"] + datadict["data"]["isp"] # 定义 IP 与域名正则 re_ipaddress = re.compile(r'^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$') if len(sys.argv) <= 1: print("Please input ip address!") sys.exit(0) # 处理输入参数 for arg in sys.argv[1:]: if re_ipaddress.match(arg): # 如果是 IP 地址 print(ip_location(arg)) else: # 如果是域名 try: ip = socket.gethostbyname(arg) print(ip_location(ip)) except socket.gaierror: print(f"Cannot resolve {arg}: Unknown host") ``` **代码解释**: 1. 使用 `urllib.request` 库来发送 HTTP 请求。 2. 使用 `json` 库来解析返回的 JSON 数据。 3. 支持输入单个 IP 地址、域名或包含多个 IP 地址的文件。 #### 六、总结 本文主要介绍了如何使用 Python 来获取 IP 地址的归属地信息。通过调用外部 API 和使用 Python 内置库,我们可以轻松地实现这一目标。这种技术不仅可以用于日常的网络管理工作中,还可以应用于更复杂的场景,如网络安全分析等。希望本文能够对你有所帮助!














- 粉丝: 5
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 2014版CAD操作教程.doc
- (源码)基于Arduino的Orbita50 Swiss Edition音乐硬件固件项目.zip
- 基于Matlab的ARIMA模型:自回归差分移动平均模型(p,d,q)的步骤与实现
- 网站制作推广策划书方案模板.docx
- 移动web技术.ppt
- 建设工程项目管理习题.doc
- 某年度中国软件产业高级管理人员培训班.pptx
- 网络营销策划的概念.doc
- 2023年广西三类人员安全继续教育网络考试试题及参考答案.doc
- 电子商务行业人力资源管理方案设计.doc
- 模块十设计网络营销渠道PPT课件.ppt
- 基于MATLAB的锅炉水温与流量串级控制系统的设计.doc
- 工程项目管理风险研究.doc
- 实验室项目管理知识计划书.doc
- 岩土工程CAD深基础支护.ppt
- MATLAB实现光子晶体滤波器:缺陷层折射率对中心波长偏移影响研究 实战版


