在数字世界中,能够追踪IP地址的地理位置是一项重要的技能。本文将指导如何使用Python语言来实现这一功能。将提供代码示例,展示如何利用Python库获取特定IP地址的城市、地区和坐标等位置信息。将IP地址映射到现实世界的位置,可以应用于多种场景,从安全监控到内容本地化。请跟随本文,探索使用Python实现这一功能。
为了追踪IP地址,将使用以下Python库:
在开始之前,请确保机器上已安装Python。可以使用pip安装所需的库:
!pip install requests ip2geotools geopy
首先,需要获取想要追踪的IP地址。可以使用‘requests’库从一个外部服务获取公网IP地址。
import requests
def get_public_ip():
response = requests.get('https://api64.ipify.org?format=json')
ip_address = response.json()['ip']
return ip_address
print("公网IP地址是:", get_public_ip())
一旦有了IP地址,就可以使用‘ip2geotools’库来获取地理位置数据。这个库支持IPv4和IPv6地址,并提供详细的地点信息。
from ip2geotools.databases.noncommercial import DbIpCity
def get_location(ip):
response = DbIpCity.get(ip, api_key='free')
location_data = {
"IP地址": response.ip_address,
"城市": response.city,
"地区": response.region,
"国家": response.country,
"纬度": response.latitude,
"经度": response.longitude
}
return location_data
ip_address = get_public_ip()
location = get_location(ip_address)
print("位置数据:", location)
使用‘geopy’库,可以计算两组坐标之间的距离。这对于测量用户和服务器之间的距离等应用非常有用。
from geopy.distance import distance
def calculate_distance(coord1, coord2):
return distance(coord1, coord2).km
# 示例坐标(纬度,经度)
coord1 = (location['纬度'], location['经度'])
coord2 = (37.7749, -122.4194) # 旧金山,CA
print(f"{coord1}和{coord2}之间的距离:{calculate_distance(coord1, coord2)}公里")
除了IP地址,可能还希望获取URL的IP地址。这可以使用‘socket’库来完成。
import socket
def get_ip_from_url(url):
ip_address = socket.gethostbyname(url)
return ip_address
url = 'www.google.com'
ip_from_url = get_ip_from_url(url)
print(f"{url}的IP地址是{ip_from_url}")
print("位置数据:", get_location(ip_from_url))
blocked_countries = ["中国", "俄罗斯", "朝鲜"]
def is_country_blocked(ip):
location = get_location(ip)
return location['国家'] in blocked_countries
ip_to_check = '8.8.8.8' # 示例IP
if is_country_blocked(ip_to_check):
print(f"来自{ip_to_check}的访问被阻止。")
else:
print(f"来自{ip_to_check}的访问被允许。")
ip1 = '8.8.8.8'
ip2 = '1.1.1.1'
location1 = get_location(ip1)
location2 = get_location(ip2)
coord1 = (location1['纬度'], location1['经度'])
coord2 = (location2['纬度'], location2['经度'])
print(f"{ip1}和{ip2}之间的距离:{calculate_distance(coord1, coord2)}公里")