
Java 提供
java.net.InetAddress
类来表示互联网协议(IP)地址。使用这个类可以非常简单地获取主机的 IP 地址。下面是一个示例代码:
import java.net.InetAddress;import java.net.UnknownHostException;public class IPAddressExample {public static void main(String[] args) {try {// 获取本地主机的 IP 地址InetAddress localHost = InetAddress.getLocalHost();System.out.println("Local Host IP Address: " + localHost.getHostAddress());// 通过主机名获取 IP 地址InetAddress byName = InetAddress.getByName("www.example.com");System.out.println("IP Address by Host Name: " + byName.getHostAddress());} catch (UnknownHostException e) {e.printStackTrace();}}}
在上面的示例中,我们首先使用
InetAddress.getLocalHost()
方法获取本地主机的 IP 地址,使用
InetAddress.getByName()
方法根据主机名获取对应的 IP 地址。这两个方法都可能抛出
UnknownHostException
异常,所以需要捕获和处理。
除使用
InetAddress
类,Java 还提供
java.net.NetworkInterface
类来获取网络接口的信息,包括 IP 地址。使用这个类可以获取更详细的网络信息,比如网卡名称、MAC 地址等。下面是一个示例代码:
import java.net.InetAddress;import java.net.NetworkInterface;import java.net.SocketException;import java.util.Enumeration;public class NetworkInterfaceExample {public static void main(String[] args) {try {// 遍历所有网络接口Enumeration networkInterfaces = NetworkInterface.getNetworkInterfaces();while (networkInterfaces.hasMoreElements()) {NetworkInterface networkInterface = networkInterfaces.nextElement();// 获取网络接口的 IP 地址Enumeration inetAddresses = networkInterface.getInetAddresses();while (inetAddresses.hasMoreElements()) {InetAddress inetAddress = inetAddresses.nextElement();System.out.println("Network Interface: " + networkInterface.getName());System.out.println("IP Address: " + inetAddress.getHostAddress());}}} catch (SocketException e) {e.printStackTrace();}}}
在上面的示例中,我们首先使用
NetworkInterface.getNetworkInterfaces()
方法获取所有的网络接口,遍历每个网络接口,并使用
NetworkInterface.getInetAddresses()
方法获取该网络接口的 IP 地址。这个方法可以获取到多个 IP 地址,因为一个网络接口可能有多个 IP 地址(比如 IPv4 和 IPv6)。同样,这个方法也可能抛出
SocketException
异常,需要进行异常处理。
除使用 Java 自带的类,我们还可以使用第三方库来获取 IP 地址信息。Apache Commons NET 是一个非常流行的网络编程工具包,它提供多种网络相关的功能,包括获取 IP 地址。下面是一个示例代码:
import org.apache.commons.net.util.SubnetUtils;public class ApacheCommonsNetExample {public static void main(String[] args) {// 获取本地主机的 IP 地址和子网掩码String localIpAddress = "192.168.1.100";String localSubnetMask = "255.255.255.0";SubnetUtils localSubnetUtils = new SubnetUtils(localIpAddress, localSubnetMask);System.out.println("Local IP Address: " + localSubnetUtils.getInfo().getAddress());System.out.println("Local Subnet Mask: " + localSubnetUtils.getInfo().getNetmask());// 获取外部 IP 地址String externalIpAddress = "8.8.8.8";SubnetUtils externalSubnetUtils = new SubnetUtils(externalIpAddress);System.out.println("External IP Address: " + externalSubnetUtils.getInfo().getAddress());}}
在上面的示例中,我们使用 Apache Commons NET 提供的
SubnetUtils
类来获取 IP 地址和子网掩码信息。这个类可以根据 IP 地址和子网掩码计算出网段信息,包括网段起始地址、结束地址、广播地址等。
Java 提供多种方式来获取 IP 地址信息,包括使用
InetAddress
类、
NetworkInterface
类以及第三方库 Apache Commons NET。每种方式都有自己的优缺点,开发者可以根据具体需求选择合适的方式。Java 提供非常强大和灵活的网络编程功能,开发者可以利用这些功能快速实现各种网络相关的需求。
手把手教你用Java获取IP归属地
本文旨在手把手教你使用Java实现获取IP归属地的功能,以解决各大平台如微信公众号、知乎和抖音等所推出的相关功能。 实现这一目标的步骤涉及获取IP地址、解决Nginx反向代理问题以及通过IP获取归属地等关键环节。 首先,我们需要基于Spring Boot搭建项目,添加控制器(Controller)中使用HttpServletRequest获取IP地址。 然而,在本地环境下,获取的IP可能是0:0:0:0:0:0:0:1或局域网IP,这些都不具备公网访问的能力,因此需要将项目部署至外网服务器,以确保能成功获取到公网IP。 面对Nginx反向代理的挑战,我们需要在Nginx的配置文件中添加特定的配置,确保客户端请求的IP能够被正确传入Nginx服务。 通过这一措施,最终获取到的是客户端的真实IP,而非Nginx服务器的IP。 获取到IP后,接下来的步骤是获取归属地。 有多种方法可以实现这一目标,本文将介绍两种主要途径:一是通过IP归属地API获取,需发起HTTP请求,使用Spring Boot的RestTemplate来完成;二是通过本地地址库获取,推荐使用Ip2region库,该库以微秒级的速度进行查询,无需担心API服务中断的问题。 为了实现本地地址库的使用,我们首先需要从GitHub官网下载地址库,并将其放置在项目资源目录下。 接下来,引入相应的Maven依赖,编写代码以完成IP归属地的查询。 最终,通过获取region信息,即可获取到IP的归属地,如“中国|0|广东省|广州市|电信”等。 为验证上述程序的有效性,我们以小程序的形式展示IP归属地获取功能,并附上页面效果截图。 只需通过扫描二维码,即可查询到自身的归属地信息,直观且便捷。
java通过域名怎么获取本机ip
代码亲测可用:import ;import ;public class TestInetAddress {InetAddress myIpAddress = null;InetAddress[] myServer = null;public static void main(String args[]) {TestInetAddress address = new TestInetAddress();(Your host IP is: + ());String domain = ;(The server domain name is: + domain);InetAddress[] array = (domain);int count=0;for(int i=1; i<; i++){(ip + i + + (domain)[i-1]);count++;}(IP address total: +count);}/** * 获得 localhost 的IP地址 * @return */public InetAddress getLocalhostIP() {try {myIpAddress = ();} catch (UnknownHostException e) {();}return (myIpAddress);}/** * 获得某域名的IP地址 * @param domain 域名 * @return */public InetAddress[] getServerIP(String domain) {try {myServer = (domain);} catch (UnknownHostException e) {();}return (myServer);}}
如何获取局域网内所有IP地址 java代码
1.得到局域网网段,可由自己机器的IP来确定 (也可以手动获取主机IP-CMD-ipconfig /all)2.根据IP类型,一次遍历局域网内IP地址 JAVA类,编译之后直接运行便可以得到局域网内所有IP,具体怎样使用你自己编写相应代码调用便可 代码如下:: package bean; import .*; import .*; public class Ip{ static public HashMap ping; //ping 后的结果集 public HashMap getPing(){ //用来得到ping后的结果集 return ping; } //当前线程的数量, 防止过多线程摧毁电脑 static int threadCount = 0; public Ip() { ping = new HashMap(); } publicvoid Ping(String ip) throws Exception{ //最多30个线程 while(threadCount>30) (50); threadCount +=1; PingIp p = new PingIp(ip); (); }public void PingAll() throws Exception{ //首先得到本机的IP,得到网段 InetAddress host = (); String hostAddress = (); int k=0; k=(.); String ss = (0,k+1); for(int i=1;i <=255;i++){//对所有局域网Ip String iip=ss+i; Ping(iip); } //等着所有Ping结束 while(threadCount>0) (50); } public static void main(String[] args) throws Exception{ Ip ip= new Ip(); (); entries = (); Iterator iter=(); String k; while(()){ entry=()(); String key=(String)(); String value=(String)(); if((true)) (key+-->+value); } } class PingIpextends Thread{ public String ip;// IP public PingIp(String ip){ =ip; } public void run(){ try{ Process p= () (ping +ip+ -w 300 -n 1); InputStreamReader ir = new InputStreamReader(()); LineNumberReader input = new LineNumberReader (ir); //读取结果行 for (int i=1 ; i <7; i++) (); String line= (); if (() <17 || (8,17)(timed out)) (ip,false); else (ip,true); //线程结束 threadCount -= 1; }catch (IOException e){} }} }