使用Pythonsocketgetnameinfo()函数获取本地主机名和端口号
发布时间:2023-12-24 18:19:30
Python的socket库中提供了一个函数getnameinfo(),可以用来获取本地主机名和端口号。该函数的使用方法如下:
import socket
# 获取本地主机名和端口号
def get_local_hostname_and_port():
# 获取本地主机名
hostname = socket.gethostname()
# 获取本地端口号
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(("8.8.8.8", 80))
_, port = s.getsockname()
s.close()
return hostname, port
# 测试函数
def test_get_local_hostname_and_port():
hostname, port = get_local_hostname_and_port()
print("本地主机名:", hostname)
print("本地端口号:", port)
# 调用测试函数
test_get_local_hostname_and_port()
在上述代码中,get_local_hostname_and_port()函数使用了两种方式分别获取本地主机名和端口号。
首先,通过socket.gethostname()函数获取本地主机名。需要注意的是,该方法在某些情况下可能会返回形如localhost.localdomain的奇怪名称,因此不能保证一定能获得合理的主机名。
其次,通过创建一个UDP套接字,使用socket.connect()函数连接到一个远程IP地址和端口号(这里使用了Google的DNS服务器8.8.8.8和端口号80),然后通过getsockname()函数获取本地套接字的IP地址和端口号。最后,关闭套接字并返回获取到的本地端口号。
需要注意的是,使用socket.connect()函数连接到一个远程IP地址和端口号是为了能够获得本地套接字的IP地址和端口号,而不是为了与远程IP通信。
在示例代码中,test_get_local_hostname_and_port()函数调用了get_local_hostname_and_port()函数,并将获取到的本地主机名和端口号进行打印输出。
该函数会输出如下结果:
本地主机名: your_local_hostname 本地端口号: your_local_port
其中的your_local_hostname和your_local_port分别为本地主机名和端口号。
可以根据实际需要将上述代码进行修改和扩展。
