java编程如何获取本地ip并显示在文本框中

java编程如何获取本地ip并显示在文本框中,第1张

jsp中:

request方法

客户端IP: requestgetRemoteAddr()

输出:1921680106

客户端主机名:requestgetRemoteHost()

输出:abc

requestgetHeader("Host")

输出:19216801:8080

Web服务器名字:requestgetServerName()

输出:19216801

服务器监听的端口:requestgetServerPort()

输出:8080

在JSP里,获取客户端的IP地址的方法是:requestgetRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了 Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了。如果使用了反向代理软件,用 requestgetRemoteAddr()方法获取的IP地址是:127001或 1921681110,而并不是客户端的真实IP。

经过代理以后,由于在客户端和服务之间增加了中间层,因此服务器无法直接拿到客户端的 IP,服务器端应用也无法直接通过转发请求的地址返回给客户端。但是在转发请求的>

1得到局域网网段,可由自己机器的IP来确定 (也可以手动获取主机IP-CMD-ipconfig /all)

2根据IP类型,一次遍历局域网内IP地址

JAVA类,编译之后直接运行便可以得到局域网内所有IP,具体怎样使用你自己编写相应代码调用便可

代码如下::

package bean;

import javaio;

import javautil;

public class Ip{

static public HashMap ping; //ping 后的结果集

public HashMap getPing(){ //用来得到ping后的结果集

return ping;

}

//当前线程的数量, 防止过多线程摧毁电脑

static int threadCount = 0;

public Ip() {

ping = new HashMap();

}

public void Ping(String ip) throws Exception{

//最多30个线程

while(threadCount>30)

Threadsleep(50);

threadCount +=1;

PingIp p = new PingIp(ip);

pstart();

}

public void PingAll() throws Exception{

//首先得到本机的IP,得到网段

InetAddress host = InetAddressgetLocalHost();

String hostAddress = hostgetHostAddress();

int k=0;

k=hostAddresslastIndexOf("");

String ss = hostAddresssubstring(0,k+1);

for(int i=1;i <=255;i++){ //对所有局域网Ip

String iip=ss+i;

Ping(iip);

}

//等着所有Ping结束

while(threadCount>0)

Threadsleep(50);

}

public static void main(String[] args) throws Exception{

Ip ip= new Ip();

ipPingAll();

javautilSet entries = pingentrySet();

Iterator iter=entriesiterator();

String k;

while(iterhasNext()){

MapEntry entry=(MapEntry)iternext();

String key=(String)entrygetKey();

String value=(String)entrygetValue();

if(valueequals("true"))

Systemoutprintln(key+"-->"+value);

}

}

class PingIp extends Thread{

public String ip; // IP

public PingIp(String ip){

thisip=ip;

}

public void run(){

try{

Process p= RuntimegetRuntime()exec ("ping "+ip+ " -w 300 -n 1");

InputStreamReader ir = new InputStreamReader(pgetInputStream());

LineNumberReader input = new LineNumberReader (ir);

//读取结果行

for (int i=1 ; i <7; i++)

inputreadLine();

String line= inputreadLine();

if (linelength() <17 || linesubstring(8,17)equals("timed out"))

pingput(ip,"false");

else

pingput(ip,"true");

//线程结束

threadCount -= 1;

}catch (IOException e){}

}

}

}

代码亲测可用:

import javanetInetAddress;

import javanetUnknownHostException;

public class TestInetAddress {

InetAddress myIpAddress = null;

InetAddress[] myServer = null;

public static void main(String args[]) {

TestInetAddress address = new TestInetAddress();

Systemoutprintln("Your host IP is: " + addressgetLocalhostIP());

String domain = ">

public static String getHostIpAddress() {

String hostIp = "";

InetAddress netAddress = getInetAddress();

hostIp = getHostIp(netAddress);

return hostIp;

}

public static InetAddress getInetAddress() {

try {

return InetAddressgetLocalHost();

} catch (UnknownHostException e) {

Systemoutprintln("unknown host!");

}

return null;

}

public static String getHostIp(InetAddress netAddress) {

if (null == netAddress) {

return null;

}

String ip = netAddressgetHostAddress(); // get the ip address

return ip;

}

public static String getHostName(InetAddress netAddress) {

if (null == netAddress) {

return null;

}

String name = netAddressgetHostName(); // get the host address

return name;

}

首先,在前端nginx上需要做如下配置:

location /

proxy_set_hearder host $host;

proxy_set_header X-forwarded-for $proxy_add_x_forwarded_for;

proxy_set_header X-real-ip $remote_addr;

};

nginx会在把请求转向后台real-server前把>

这个是获取不到的,因为有代理、端口映射等等转发情况的存在。为什么不保存相对路径/域名/或者在服务器上某个配置文件中配置域名/数据库中一个表/数据库中某个字段保存当前服务器的ip地址呢?

以上就是关于java编程如何获取本地ip并显示在文本框中全部的内容,包括:java编程如何获取本地ip并显示在文本框中、怎样用JAVA程序获取本机ip 、JAVA如何获取局域网内所有安卓设备的ip地址,MAC以及序列号等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/10136232.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存