分享

如何使用 Python 来跟踪 IP 地址

 NeighborMrSun 2023-03-03 发布于湖南

大家好,我是小寒。

今天来介绍一个流行的 python库 「ip2geotools」,使用它可以确定 IP地址 对应的 国家、地区、城市、纬度和经度等。

根据 IP 地址获取位置

导入必要的库
import socket
import requests
from ip2geotools.databases.noncommercial import DbIpCity
from geopy.distance import distance

「下面的函数用于打印IP地址、城市、国家、坐标等的详细信息。」

def printDetails(ip):
    res = DbIpCity.get(ip, api_key='free')
    print(f'IP Address: {res.ip_address}')
    print(f'Location: {res.city}, {res.region}, {res.country}')
    print(f'Coordinates: (Lat: {res.latitude}, Lng: {res.longitude})')

从IP地址获取位置

ip_add = input('Enter IP: ')  # 198.35.26.96
printDetails(ip_add)

输出:

IP Address: 198.35.26.96
Location: San Jose, California, US
Coordinates: (Lat: 37.3361663, Lng: -121.890591)

「从 URL 获取位置」

url = input('Enter URL: ')  # www.youtube.com
ip_add = socket.gethostbyname(url)
printDetails(ip_add)

输出:

IP Address: 142.250.66.142
Location: Hong Kong, Central and Western, HK
Coordinates: (Lat: 22.2850394, Lng: 114.1583819)

一些常见的用例

在这里,我们讨论它的一些用例,

「例如阻止某些特定国家/地区的 IP 地址或计算两个 IP 地址之间的距离等。」
1.根据位置阻止某些 IP 地址

下面的代码查找 IP 地址的位置,然后检查该位置的国家/地区是否在被阻止国家/地区列表中。

def is_country_blocked(ip_address):
    blocked_countries = ['China''Canada''India']
    location = DbIpCity.get(ip_address)
    if location.country in blocked_countries:
        return True
    else:
        return False

ip_add = input('Enter IP: ')  # 198.35.26.96
if is_country_blocked(ip_add) is True:
    print(f'IP Address: {ip_add} is blocked')
else:
    print(f'IP Address: {ip_add} is allowed')

输出:

Enter the IP Address: 198.35.26.96
IP Address: 198.35.26.96 is allowed
2.计算两个IP地址之间的距离

下面的代码将计算两个 IP 地址位置之间的距离(以公里为单位)。

def calculate_distance(ip1, ip2):
    res1 = DbIpCity.get(ip1)
    res2 = DbIpCity.get(ip2)
    lat1, lon1 = res1.latitude, res1.longitude
    lat2, lon2 = res2.latitude, res2.longitude
    return distance((lat1, lon1), (lat2, lon2)).km

# Input two IP addresses
ip_add_1 = input('1st IP: ')  # 198.35.26.96
ip_add_2 = input('2nd IP: ')  # 220.158.144.59
dist = calculate_distance(ip_add_1, ip_add_2)
print(f'Distance between them is {str(dist)}km')

输出:

Enter 1st IP Address: 198.35.26.96
Enter 2nd IP Address: 220.158.144.59
Distance between them is 12790.62320788363km
3.计算你当前位置和服务器之间的距离

下面的代码将计算你当前位置与给定 IP 地址位置之间的距离(以公里为单位)。

def get_distance_from_location(ip, lat, lon):
    res = DbIpCity.get(ip)
    ip_lat, ip_lon = res.latitude, res.longitude
    return distance((ip_lat, ip_lon), (lat, lon)).km

server_ip = input('Server's IP: ')
lat = float(input('Your Latitude: '))
lng = float(input('Your Longitude: '))

dist = get_distance_from_location(server_ip, lat, lng)
print(f'Distance between the server and your location is {str(dist)}km')

输出:

Enter your server's IP Address: 208.80.152.201
Enter your current location (Latitude): 26.4710
Enter your current location (Longitude): 73.1134
Distance between the server and your location is 12183.275099919923km

结论

跟踪 IP 地址的位置有几个好处,

「例如企业可以根据用户的位置向用户投放有针对性的广告。这可以带来更有效的营销活动、更高的转化率和个性化的用户体验。」
此外,它还有助于欺诈检测,例如阻止来自某些特定国家/地区的 IP 地址,还可以验证 IP 地址以确保它们的格式正确。

最后


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约