一臺電腦兩個IP,資訊如何傳遞? 這個問題很有意思,我們實踐出真知!
解決思路:1,介面卡網路除錯。(採用)
2,抓包工具獲取當前請求的實際ip地址。
話不多說上圖:
頁面圖示顯示有線無線都連線了,但是預設連線的網路顯示是有線。
第一步:
我們可以透過cmd命令 ipconfig 檢視當前閘道器 ip 和dns 等。
ipconfig /all可以檢視詳細資訊,這裡我把dns 都隱藏了防止dns劫持。
wlan代表是當前wifi網路 192.168.40.193
乙太網2就是有線網路 192.168.10.130
vmnet8這個是我虛擬機器的網路 192.168.85.1
配置的虛擬ip,這個ip是根據手機熱點的閘道器設定的,虛擬網路如果要訪問電腦上面的網路,必須在同一閘道器下,再關閉虛擬機器防火牆,ping通才能訪問。
第三步 透過頁面地址訪問後臺獲取當前區域網本地ip地址:
電腦本機地址為127.0.0.1 預設這個地址dns解析的ip地址。
開啟測試介面工具訪問,我們後臺地址就是返回前端頁面介面api,所以頁面的請求引數和ip會根據我們實際區域網ip訪問,那麼我們就可以獲取當前用的哪個網路的ip。
3.1 測試當前網路
這是後臺除錯抓取的地址,我啟用的虛擬機器的ip,所以預設選擇net8網路
這是獲取ip的核心程式碼:
@SuppressWarnings("rawtypes")private InetAddress getLocalHostLANAddress() throws UnknownHostException {try {InetAddress candidateAddress = null;// 遍歷所有的網路介面for (Enumeration ifaces = NetworkInterface.getNetworkInterfaces(); ifaces.hasMoreElements();) {NetworkInterface iface = (NetworkInterface) ifaces.nextElement();// 在所有的介面下再遍歷IPfor (Enumeration inetAddrs = iface.getInetAddresses(); inetAddrs.hasMoreElements();) {InetAddress inetAddr = (InetAddress) inetAddrs.nextElement();if (!inetAddr.isLoopbackAddress()) {// 排除loopback型別地址if (inetAddr.isSiteLocalAddress()) {// 如果是site-local地址,就是它了return inetAddr;} else if (candidateAddress == null) {// site-local型別的地址未被發現,先記錄候選地址candidateAddress = inetAddr;}}}}if (candidateAddress != null) {return candidateAddress;}// 如果沒有發現 non-loopback地址.只能用最次選的方案InetAddress jdkSuppliedAddress = InetAddress.getLocalHost();if (jdkSuppliedAddress == null) {throw new UnknownHostException("The JDK InetAddress.getLocalHost() method unexpectedly returned null.");}return jdkSuppliedAddress;} catch (Exception e) {UnknownHostException unknownHostException = new UnknownHostException("Failed to determine LAN address: " + e);unknownHostException.initCause(e);throw unknownHostException;}}
3.2 啟用有線網路在除錯關閉虛擬網路:
傳送請求獲取結果:
當前ip是我們有線ip
3.3 關閉有線網路啟用無線網路除錯:
總結:
根據以上我們第一種思路可以得出結論,網路請求訪問是根據當前你的電腦適配網路選擇來的,根據你啟用的網路獲取當前閘道器進行ip轉發和訪問,預設不設定走有線網路。第二種思路可以根據第三方工具抓包獲取當前的解析資料包,也可以分析出當前的網路,毫無疑問抓包的網路也是根據當前你的網路介面卡來的。
最後:
但是我們不難發現,我在頁面訪問的時候可以用192.168.40.193 192.168.10.130 這倆個ip進行介面訪問。我們發現都可以訪問,大家或許有疑問,我明明後臺測試的只有一個ip,為啥都可以訪問?那這個問題就給朋友們留下了伏筆了!歡迎大家留言評論!
一臺電腦兩個IP,資訊如何傳遞? 這個問題很有意思,我們實踐出真知!
解決思路:1,介面卡網路除錯。(採用)
2,抓包工具獲取當前請求的實際ip地址。
話不多說上圖:
頁面圖示顯示有線無線都連線了,但是預設連線的網路顯示是有線。
第一步:
我們可以透過cmd命令 ipconfig 檢視當前閘道器 ip 和dns 等。
ipconfig /all可以檢視詳細資訊,這裡我把dns 都隱藏了防止dns劫持。
wlan代表是當前wifi網路 192.168.40.193
乙太網2就是有線網路 192.168.10.130
vmnet8這個是我虛擬機器的網路 192.168.85.1
配置的虛擬ip,這個ip是根據手機熱點的閘道器設定的,虛擬網路如果要訪問電腦上面的網路,必須在同一閘道器下,再關閉虛擬機器防火牆,ping通才能訪問。
第三步 透過頁面地址訪問後臺獲取當前區域網本地ip地址:
電腦本機地址為127.0.0.1 預設這個地址dns解析的ip地址。
開啟測試介面工具訪問,我們後臺地址就是返回前端頁面介面api,所以頁面的請求引數和ip會根據我們實際區域網ip訪問,那麼我們就可以獲取當前用的哪個網路的ip。
3.1 測試當前網路
這是後臺除錯抓取的地址,我啟用的虛擬機器的ip,所以預設選擇net8網路
這是獲取ip的核心程式碼:
@SuppressWarnings("rawtypes")private InetAddress getLocalHostLANAddress() throws UnknownHostException {try {InetAddress candidateAddress = null;// 遍歷所有的網路介面for (Enumeration ifaces = NetworkInterface.getNetworkInterfaces(); ifaces.hasMoreElements();) {NetworkInterface iface = (NetworkInterface) ifaces.nextElement();// 在所有的介面下再遍歷IPfor (Enumeration inetAddrs = iface.getInetAddresses(); inetAddrs.hasMoreElements();) {InetAddress inetAddr = (InetAddress) inetAddrs.nextElement();if (!inetAddr.isLoopbackAddress()) {// 排除loopback型別地址if (inetAddr.isSiteLocalAddress()) {// 如果是site-local地址,就是它了return inetAddr;} else if (candidateAddress == null) {// site-local型別的地址未被發現,先記錄候選地址candidateAddress = inetAddr;}}}}if (candidateAddress != null) {return candidateAddress;}// 如果沒有發現 non-loopback地址.只能用最次選的方案InetAddress jdkSuppliedAddress = InetAddress.getLocalHost();if (jdkSuppliedAddress == null) {throw new UnknownHostException("The JDK InetAddress.getLocalHost() method unexpectedly returned null.");}return jdkSuppliedAddress;} catch (Exception e) {UnknownHostException unknownHostException = new UnknownHostException("Failed to determine LAN address: " + e);unknownHostException.initCause(e);throw unknownHostException;}}
3.2 啟用有線網路在除錯關閉虛擬網路:
傳送請求獲取結果:
當前ip是我們有線ip
3.3 關閉有線網路啟用無線網路除錯:
傳送請求獲取結果:
總結:
根據以上我們第一種思路可以得出結論,網路請求訪問是根據當前你的電腦適配網路選擇來的,根據你啟用的網路獲取當前閘道器進行ip轉發和訪問,預設不設定走有線網路。第二種思路可以根據第三方工具抓包獲取當前的解析資料包,也可以分析出當前的網路,毫無疑問抓包的網路也是根據當前你的網路介面卡來的。
最後:
但是我們不難發現,我在頁面訪問的時候可以用192.168.40.193 192.168.10.130 這倆個ip進行介面訪問。我們發現都可以訪問,大家或許有疑問,我明明後臺測試的只有一個ip,為啥都可以訪問?那這個問題就給朋友們留下了伏筆了!歡迎大家留言評論!