📅  最后修改于: 2023-12-03 14:57:14.186000             🧑  作者: Mango
在编写网络应用程序时,获取外部IP是很常见的需求。Python中可以通过多种方式来获取IP地址。本文将介绍4种获取外部IP的方法。
requests库是Python中常用的HTTP库之一,它可以发送HTTP请求并获取响应。通过向一个Web服务程序发送请求,我们可以获取到自己的IP地址。
import requests
def get_external_ip():
r = requests.get("https://api.ipify.org/")
return r.text
解释:我们向https://api.ipify.org/发送一个HTTP GET请求,该网站会返回当前请求的外部IP地址。返回的内容是一个字符串,我们可以使用r.text获取到该字符串。
urllib库是Python中的另一个常用HTTP库。使用urllib库获取外部IP与使用requests库类似。
from urllib.request import urlopen
def get_external_ip():
response = urlopen("https://api.ipify.org/")
return response.read().decode('utf-8')
解释:我们使用urlopen()函数向https://api.ipify.org/发送一个HTTP GET请求。该函数会返回一个类文件对象,我们可以使用response.read()获取到该文件的内容。由于返回的内容是一个bytes对象,我们需要使用.decode('utf-8')将其转换成字符串。
Python中的socket库提供了与网络通信相关的函数和类。我们可以使用socket库获取当前机器的IP地址和外部IP地址。
import socket
def get_external_ip():
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(("8.8.8.8", 80))
return s.getsockname()[0]
解释:我们通过创建一个UDP socket对象,并向谷歌DNS服务器发送一个数据包来获取当前机器的IP地址。由于我们只需要获取外部IP地址,因此可以向任何一个外部IP地址发送数据包。因为UDP协议是无连接的,因此我们不必担心请求会失败的问题。我们使用s.getsockname()[0]获取到当前机器的IP地址。
还有很多第三方服务可以提供获取外部IP地址的功能,我们可以使用它们提供的API来获取IP地址。比如,我们可以使用ipapi.com的API获取当前机器的IP地址。
import requests
def get_external_ip():
r = requests.get("https://ipapi.co/ip/")
return r.text
解释:我们向https://ipapi.com/ip/发送一个HTTP GET请求,该网站会返回当前请求的外部IP地址。返回的内容是一个字符串,我们可以使用r.text获取到该字符串。
以上4种获取外部IP的方法均可行。对于大多数应用程序,我们建议使用requests库或urllib库,因为它们都是使用HTTP协议进行通信的。如果你需要获取当前机器的IP地址,可以使用socket库。而如果你需要特定的功能,比如获取城市名称、邮政编码等,可以使用第三方服务来实现。