一、获取本机IP地址
获取本机IP地址的方法具有一定的系统依赖,不同的系统实现方式有所不同。下面我们分别介绍Windows、Linux和Mac OS系统下获取本机IP地址的方法。
1、Windows系统
import socket def get_local_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 print(get_local_ip())
上面的代码使用Python的socket模块来获取本机IP地址,连接Google的DNS服务器8.8.8.8时,获取本机IP地址。其中,socket.AF_INET表示使用IPv4协议,socket.SOCK_DGRAM表示使用UDP协议。
2、Linux系统
ifconfig
在Linux下,ifconfig命令可以用来查看本机的IP地址。
3、Mac OS系统
ifconfig | grep "inet " | grep -v 127.0.0.1 | awk '{ print $2 }'
在Mac OS下,可以使用ifconfig命令来获取本地IP地址,然后通过grep和awk命令来提取IP地址。
二、拼本地连接IP地址
在使用网络编程时,经常需要获取本地连接IP地址,它是由本机的IP地址和端口号组成的一个唯一标识。下面是Python的示例代码:
import socket def get_local_addr(): s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.connect(('8.8.8.8', 80)) ip, port = s.getsockname() s.close() return f"{ip}:{port}" print(get_local_addr())
上面的代码中,首先创建了一个socket对象,然后调用connect()方法连接Google的DNS服务器8.8.8.8。然后通过调用getsockname()方法获取本地IP地址和端口号,并返回一个拼接好的字符串。
三、使用JavaScript和Vue获取本地IP地址
现在,越来越多的Web应用需要获取客户端的IP地址。下面我们分别介绍使用JavaScript和Vue框架来获取本机IP地址的方法。
1、使用JavaScript
使用JavaScript获取本机IP地址的方法非常简单,只需要创建一个UDP连接,然后通过connection属性获取本机IP地址即可:
const udp = new RTCPeerConnection({iceServers: []}) udp.createDataChannel('') udp.createOffer().then(offer => udp.setLocalDescription(offer)) udp.onicecandidate = evt => t(c => c && c.dispatchEvent(new CustomEvent('rtc:ip', {detail: evt.candidate.candidate.split(' ')[4]})))
上面的代码创建了一个RTCPeerConnection对象,然后创建一个未命名的数据通道和一个offer对象,设置本地SDP,然后获取本机IP地址并触发一个自定义事件。
2、使用Vue
在Vue框架中获取本机IP地址的方法与使用JavaScript相似,但需要先安装webrtc-adapter库:
npm install webrtc-adapter -S
然后,在Vue组件中添加以下代码:
<script> import adapter from 'webrtc-adapter' export default { mounted () { const pc = new window.RTCPeerConnection({ iceServers: [] }) let ipAddr pc.createDataChannel('') pc.createOffer() .then(offer => pc.setLocalDescription(offer)) .then(() => new Promise(resolve => { pc.onicecandidate = e => { if (!e.candidate) resolve() } })) .then(() => { const regex = /([0-9]{1,3}(\.[0-9]{1,3}){3})/ const candidate = pc.localDescription.candidate ipAddr = regex.exec(candidate)[1] console.log('**** LOCAL IP ADDRESS: ', ipAddr) }) .catch(error => { console.error('**** ERROR: ', error) }) } } </script>
上面的代码中,首先创建了一个RTCPeerConnection对象,然后创建一个未命名的数据通道和一个offer对象,设置本地SDP,然后获取本机IP地址。
四、获取本地IP的多个网卡地址
多个网卡是指一台计算机上安装了多个不同的网卡,每个网卡都有一个IP地址。获取本地IP的多个网卡地址时,需要使用Python的socket库和fcntl库。
import socket import fcntl import struct def get_local_ips(): ips = [] interfaces = socket.if_nameindex() for if_idx in interfaces: ifname = if_idx[1] if ifname.startswith('lo'): continue s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) ip = fcntl.ioctl(s.fileno(), 0x8915, struct.pack('256s', ifname[:15].encode('utf-8'))) ips.append(socket.inet_ntoa(ip[20:24])) return ips print(get_local_ips())
上面的代码中,首先使用if_nameindex()函数获取所有网卡的名称和索引,然后分别获取每个网卡对应的IP地址。
五、获取本机IP地址的命令
在Linux和Mac OS系统下,可以使用ifconfig命令来查看本机的IP地址。
ifconfig
在Windows系统下,可以使用ipconfig命令来查看本机的IP地址。
ipconfig
六、获取本地IP地址失败
实际上,获取本地IP地址是受网络环境和计算机系统等多种因素影响的。如果获取失败,可以尝试使用下面的方法:
- 确保本机已连接到网络,并且网络正常。
- 检查计算机防火墙和杀毒软件的设置,有时候它们会禁止获取本机IP地址。
- 使用不同的获取IP地址的方法,比如使用JavaScript或者命令行。
七、获取本地IP地址程序
下面是一个Python程序,通过socket库实现获取本地IP地址:
import socket def get_local_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_local_ip())
上面的程序会打印出本机的IP地址。
八、获取本地IP地址Node.js
在Node.js中获取本地IP地址的方法非常简单,只需要使用os库和networkInterfaces()函数即可:
const os = require('os') function getLocalIP () { const interfaces = os.networkInterfaces() for (const ifname of Object.keys(interfaces)) { const iface = interfaces[ifname] for (const alias of iface) { if (alias.family === 'IPv4' && !alias.internal) { return alias.address } } } return '127.0.0.1' } console.log(getLocalIP())
上面的代码会打印出本机的IP地址。