一、獲取本機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地址。
原創文章,作者:VSKUL,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/332156.html