应用场景:
本机 ip 在变化,但是代码中需要IP当参数,
这时候我们可以用下面几种方法来获取IP地址
方法一 (适用于Linux 系统):
import os
import re
ipstr = os.popen(""" ifconfig | sed -n "2p" """).readlines()
#效果是这样子的啊
# [' inet addr:192.168.8.110 Bcast:192.168.8.255 Mask:255.255.255.0\n']
#然后强大的正则来了
ip = re.findall("((?<![\.\d])(?:\d{1,3}\.){3}\d{1,3}(?![\.\d]))", ipstr)[0]
print(ip)
方法二 (Linux window 都适用):
这个 主要是用socket 协议 ,懒的写代码了,现搬了一个
原文网址 https://blog.csdn.net/u013314786/article/details/78962103
解释一下,这个是通过 connet,这里她选择8.8.8.8,是Google提供的免费DNS服务器的IP地址,一般不会挂,完成一个有连接协议的连接过程,在利用这个函数
int getsockname(int s, struct sockaddr *name, socklen_t *namelen);
Get the current name for the specified socket.
获取本地套接口的名字,包括它的IP和端口。
import socket
def get_host_ip():
"""
查询本机ip地址
:return: ip
"""
try:
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(('8.8.8.8', 80))
ip = s.getsockname()[0]
finally:
s.close()
return ip
if __name__ == '__main__':
print(get_host_ip())