国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

java獲取linux服務器上的IP操作

瀏覽:36日期:2022-08-26 16:13:04

在編碼過程中需要獲取本地IP地址,首先使用的是下面的方法,在Windows環境正常,但是linux服務器上就獲取不到,

public static String getIpAddress() { String hostAddress = ''; try { InetAddress address = InetAddress.getLocalHost(); hostAddress = address.getHostAddress(); } catch (UnknownHostException e) { e.printStackTrace(); } return hostAddress; }

這樣在linux上依然獲取到的是127.0.0.1,

查詢服務器上面IP發現:

[mm_cbms1@localhost ~]$ ip address

1:

lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWNlink/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host loinet6 ::1/128 scope host valid_lft forever preferred_lft forever

2:

eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000link/ether 00:50:56:a2:0d:1b brd ff:ff:ff:ff:ff:ffinet 10.12.8.243/24 brd 10.12.8.255 scope global eth0inet6 fe80::250:56ff:fea2:d1b/64 scope link

valid_lft forever preferred_lft forever

這里首先要了解上面列出的接口中的含義:

1、linux的網絡接口之掃盲

(1) 網絡接口的命名

這里并不存在一定的命名規范,但網絡接口名字的定義一般都是要有意義的。例如:

eth0: ethernet的簡寫,一般用于以太網接口。

wifi0:wifi是無線局域網,因此wifi0一般指無線網絡接口。

ath0: Atheros的簡寫,一般指Atheros芯片所包含的無線網絡接口。

lo: local的簡寫,一般指本地環回接口。

(2) 網絡接口如何工作

網絡接口是用來發送和接受數據包的基本設備。

系統中的所有網絡接口組成一個鏈狀結構,應用層程序使用時按名稱調用。

每個網絡接口在linux系統中對應于一個struct net_device結構體,包含name,mac,mask,mtu…信息。

每個硬件網卡(一個MAC)對應一個網絡接口,其工作完全由相應的驅動程序控制。

(3) 虛擬網絡接口

虛擬網絡接口的應用范圍非常廣泛。最著名的當屬“lo”了,基本上每個linux系統都有這個接口。

虛擬網絡接口并不真實地從外界接收和發送數據包,而是在系統內部接收和發送數據包,因此虛擬網絡接口不需要驅動程序。

虛擬網絡接口和真實存在的網絡接口在使用上是一致的。

(4) 網絡接口的創建

硬件網卡的網絡接口由驅動程序創建。而虛擬的網絡接口由系統創建或通過應用層程序創建。

驅動中創建網絡接口的函數是:register_netdev(struct net_device *)或者register_netdevice(struct net_device *)。

這兩個函數的區別是:register_netdev(…)會自動生成以”eth”作為打頭名稱的接口,而register_netdevice(…)需要提前指定接口名稱.事實上,register_netdev(…)也是通過調用register_netdevice(…)實現的。

2、LINUX中的lo(回環接口)

1) 什么是LO接口?

在LINUX系統中,除了網絡接口eth0,還可以有別的接口,比如lo(本地環路接口)。

2) LO接口的作用是什么?

假如包是由一個本地進程為另一個本地進程產生的, 它們將通過外出鏈的’lo’接口,然后返回進入鏈的’lo’接口。

其實getLocalHost方法獲取的是lo接口對應的IP地址,了解了上述問題那java編碼如何獲取正確的地址呢?

java為了方便網絡編程,提供了表示IP地址的類、表示網絡接口(這個接口是指網卡)的類,表示網絡連接接口的類,例如InetAddress,但是測試發現NetworkInterface類同樣提供了獲取本地計算機網絡接口相關的信息的方法。盡管InetAddress類提供獲取IP地址的方法,但是要想獲取本機的網絡接口的詳細信息,還需要依賴NetworkInterface接口中的方法。測試發現下面方法可以獲得服務器對應的IP地址,在linux服務器上和本地測試通過

(1)

public static String getInet4Address() { Enumeration<NetworkInterface> nis; String ip = null; try { nis = NetworkInterface.getNetworkInterfaces(); for (; nis.hasMoreElements();) { NetworkInterface ni = nis.nextElement(); Enumeration<InetAddress> ias = ni.getInetAddresses(); for (; ias.hasMoreElements();) { InetAddress ia = ias.nextElement(); //ia instanceof Inet6Address && !ia.equals('') if (ia instanceof Inet4Address && !ia.getHostAddress().equals('127.0.0.1')) { ip = ia.getHostAddress(); } } } } catch (SocketException e) { // TODO Auto-generated catch block e.printStackTrace(); } return ip; }

(2)

public static InetAddress getCurrentIp() { try { Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces(); while (networkInterfaces.hasMoreElements()) {NetworkInterface ni = (NetworkInterface) networkInterfaces.nextElement();Enumeration<InetAddress> nias = ni.getInetAddresses();while (nias.hasMoreElements()) { InetAddress ia = (InetAddress) nias.nextElement(); if (!ia.isLinkLocalAddress() && !ia.isLoopbackAddress() && ia instanceof Inet4Address) { return ia; }} } } catch (SocketException e) { logger.error(e.getStackTrace()); } return null; }

上述兩個方法都可以獲取正確的IP地址,具體NetworkInterface的使用還需要以后應用到了進行深入研究一下

補充知識:Java獲取所有網卡IP地址

Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces(); while (networkInterfaces.hasMoreElements()) { NetworkInterface networkInterface = networkInterfaces.nextElement(); Enumeration<InetAddress> inetAddresses = networkInterface.getInetAddresses(); while (inetAddresses.hasMoreElements()) {InetAddress inetAddress = inetAddresses.nextElement();if (inetAddress.isLoopbackAddress()) {//回路地址,如127.0.0.1System.out.println('loop addr:' + inetAddress);} else if (inetAddress.isLinkLocalAddress()) {//169.254.x.xSystem.out.println('link addr:' + inetAddress);} else { //非鏈接和回路真實ipSystem.out.println('ip:' + inetAddress);} } }

結果:

loop addr:/127.0.0.1loop addr:/0:0:0:0:0:0:0:1ip:/192.168.10.89

以上這篇java獲取linux服務器上的IP操作就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
主站蜘蛛池模板: 9191在线亚洲精品 | 日韩精品一区二区三区在线观看 | 成人牲交一极毛片 | 日韩专区亚洲国产精品 | 成人免费午间影院在线观看 | 欧洲成人在线 | 久久久久久免费精品视频 | 日韩性黄色一级 | 国产在线精品一区二区三区不卡 | 国产成人精品亚洲77美色 | 女同日韩互慰互摸在线观看 | 一级毛片免费视频网站 | 午夜视频一区二区 | 性感美女视频免费网站午夜 | 玖玖香蕉视频 | 欧美做爱毛片 | 国内精品免费一区二区观看 | 美女视频黄免费 | 在线毛片一区二区不卡视频 | 日本美女视频韩国视频网站免费 | 蝴蝶成人世界第八影院 | 欧美在线精品一区二区三区 | 美国免费高清一级毛片 | 久久精品一区二区三区不卡牛牛 | 成人性视频免费网站 | 亚洲一级高清在线中文字幕 | 亚洲午夜在线 | 国产在线精品一区二区三区不卡 | 久久一二| 91成人国产 | 九九精品视频在线 | 综合558欧美成人永久网站 | 亚洲欧美国产高清va在线播放 | 精品久久久久中文字幕日本 | 中文字幕乱码在线观看 | 欧美在线视 | 一级做a爰片久久毛片美女 一级做a爰片久久毛片免费看 | 三级中文字幕 | 日韩精品一区二区三区乱码 | 亚洲欧美在线精品一区二区 | 性高湖久久久久久久久 |