⑴ java編程如何獲取本地ip並顯示在文本框中
jsp中:
request方法
客戶端IP: request.getRemoteAddr()
輸出:.168.0.106
客戶端主機名:request.getRemoteHost()
輸出:abc
request.getHeader("Host")
輸出:192.168.0.1:8080
Web伺服器名字:request.getServerName()
輸出:192.168.0.1
伺服器監聽的埠:request.getServerPort()
輸出:8080
在JSP里,獲取客戶端的IP地址的方法是:request.getRemoteAddr(),這種方法在大部分情況下都是有效的。但是在通過了 Apache,Squid等反向代理軟體就不能獲取到客戶端的真實IP地址了。如果使用了反向代理軟體,用 request.getRemoteAddr()方法獲取的IP地址是:127.0.0.1或 192.168.1.110,而並不是客戶端的真實IP。
經過代理以後,由於在客戶端和服務之間增加了中間層,因此伺服器無法直接拿到客戶端的 IP,伺服器端應用也無法直接通過轉發請求的地址返回給客戶端。但是在轉發請求的HTTP頭信息中,增加了X-FORWARDED-FOR信息。用以跟蹤 原有的客戶端IP地址和原來客戶端請求的伺服器地址。當我們訪問index.jsp/時,其實並不是我們瀏覽器真正訪問到了伺服器上的index.jsp 文件,而是先由代理伺服器去訪問index.jsp ,代理伺服器再將訪問到的結果返回給我們的瀏覽器,因為是代理伺服器去訪問index.jsp的,所以index.jsp中通過 request.getRemoteAddr()的方法獲取的IP實際上是代理伺服器的地址,並不是客戶端的IP地址。
於是可得出獲得客戶端真實IP地址的方法一:
public String getRemortIP(HttpServletRequest request) {
if (request.getHeader("x-forwarded-for") == null) {
return request.getRemoteAddr();
}
return request.getHeader("x-forwarded-for");
}
獲得客戶端真實IP地址的方法二:
public String getIpAddr(HttpServletRequest request) {
String ip = request.getHeader("x-forwarded-for");
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
return ip;
}
可是,如果通過了多級反向代理的話,X-Forwarded-For的值並不止一個,而是一串IP值,究竟哪個才是真正的用戶端的真實IP呢?
答案是取X-Forwarded-For中第一個非unknown的有效IP字元串。如:
X-Forwarded-For:192.168.1.110, 192.168.1.120, 192.168.1.130, 192.168.1.100
用戶真實IP為: 192.168.1.110
⑵ 關於java web獲取客戶端ip地址的方法
request.getRemoteAddr()是獲得客戶端的ip地址。
request.getRemoteHost()是獲得客戶端的主機名。
⑶ 兩台電腦用一根網線相連,怎麼用java語言獲取另一台電腦的IP地址和埠
有兩種方法:
1.對方訪問你的主機上的java web項目,通過request.getRemoteAddr();
2.通過命令返回的結果
===============================
COLOR 0A
CLS
@ECHO Off
Title 查詢區域網內在線電腦IP
:send
@ECHO off&setlocal enabledelayedexpansion
ECHO 正在獲取本機的IP地址,請稍等...
for /f "tokens=3 skip=2 delims=: " %%i in ('nbtstat -n') do (
set "IP=%%i"
set IP=!IP:~1,-1!
ECHO 本機IP為:!IP!
goto :next
)
:next
for /f "delims=. tokens=1,2,3,4" %%i in ("%IP%") do set range=%%i.%%j.%%k
ECHO.&ECHO 正在獲取本網段內的其它在線計算機名,請稍等...
ECHO 本網段【%range%.*】內的計算機有:
for /f "delims=" %%i in ('net view') do (
set "var=%%i"
::查詢在線計算機名稱
if "!var:~0,2!"=="\\" (
set "var=!var:~2!"
ECHO !var!
ping -n 1 !var!>nul
))
ECHO.
ECHO 正在獲取本網段內的其它在線計算機IP,請稍等...
for /f "skip=3 tokens=1,* delims= " %%i in ('arp -a') do ECHO IP: %%i 正在使用
ECHO.
ECHO 查詢完畢,按任意鍵退出...
pause>nul
===============================
String cmd = "";
Runtime runtime = Runtime.getRuntime();
try {
Process process = runtime.exec(cmd);
InputStream in = process.getInputStream();
} catch (IOException e) {
e.printStackTrace();
}
通過java程序執行cmd命令截取返回結果可以得到所有的區域網類使用ip地址
剩下的自己組織我就不幫你了
⑷ java 怎麼獲取web容器的ip和埠號
<tr>
<td width="50%"><%= request.getServerName()%></td>
<td height="4">伺服器的域名</td>
</tr>
<tr>
<td width="50%"><%= java.net.InetAddress.getLocalHost().getHostAddress() %></td>
<td height="4">伺服器的IP地址</td>
</tr>
<tr>
<td width="50%"><%=request.getServerPort()%></td>
<td height="5">伺服器正在專運行的埠屬</td>
</tr>
⑸ java 怎麼獲取web容器的ip和埠號
request.getRemoteAddr(); IP獲取
request.getRemotePort(): 埠號復
⑹ JAVA WEB項目有怎麼方法能獲取訪問自己網站的用戶的IP和主機名
今天在搞JS(JavaScript)獲取客戶端IP的小程序,上網搜了下,好多在現在的系統和瀏覽器中的都無效,很無奈,在Chrome、FireFox中很少搞到直接利用ActiveX獲取IP等的JS腳本。下面的代碼是我在所有windowsNT5.0及以上的系統上都測試通過的,給出代碼:
方法一(只針對IE且客戶端的IE允許AcitiveX運行,通過平台:XP,SERVER03,2000):
獲取客戶端IP。
[html] view plain
<HTML>
<HEAD>
<TITLE>GetLocalIP</TITLE>
</HEAD>
<BODY>
獲取IP:
<script language="JavaScript"> function GetLocalIPAddr(){ var oSetting = null; var ip = null; try{ oSetting = new ActiveXObject("rcbdyctl.Setting"); ip = oSetting.GetIPAddress; if (ip.length == 0){ return "沒有連接到Internet"; } oSetting = null; }catch(e){ return ip; } return ip; } document.write(GetLocalIPAddr()+"<br/>") </script>
</BODY>
</HTML>
方法二(所有的平台及瀏覽器):
獲取客戶端處在網路中的IP,前提是客戶得聯網。
[html] view plain
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>JavaScript獲取客戶端IP[利用新浪介面]</title>
</head>
<body>
<script type="text/javascript" src="http://counter.sina.com.cn/ip/" charset="gb2312"></script> <!--獲取介面數據,注意charset -->
<script type="text/javascript">
document.writeln("IP地址:"+ILData[0]+"<br />"); //輸出介面數據中的IP地址
document.writeln("地址類型:"+ILData[1]+"<br />"); //輸出介面數據中的IP地址的類型
document.writeln("地址類型:"+ILData[2]+"<br />"); //輸出介面數據中的IP地址的省市
document.writeln("地址類型:"+ILData[3]+"<br />"); //輸出介面數據中的IP地址的
document.writeln("地址類型:"+ILData[4]+"<br />"); //輸出介面數據中的IP地址的運營商
</script>
</body>
</html>
方法三(只針對IE且客戶端的IE允許AcitiveX運行):
調用VBS腳本,獲取計算機名(有些人不知道什麼是計算機名,簡單解釋就是它是這台機器的物理名稱而不是你在用的那個用戶名)和登錄的用戶名。
[html] view plain
<HTML>
<HEAD>
<TITLE>WMI Scripting HTML</TITLE>
</HEAD>
<BODY>
<script language=javascript>
var WshShell =new ActiveXObject("WScript.Shell");
document.write("計算機名 = "+ WshShell.ExpandEnvironmentStrings("%COMPUTERNAME%")+"<br/>");
document.write("登錄用戶名 = "+ WshShell.ExpandEnvironmentStrings("%USERNAME%")+"<br/>");
</script>
</BODY>
</HTML>
方法四(只針對IE且客戶端的IE允許AcitiveX運行):
獲取計算機名、登錄的用戶名和域名(如果你加入了域,顯示你這台機器處在哪個域中)。
[html] view plain
<HTML>
<HEAD>
<TITLE>WMI Scripting HTML</TITLE>
</HEAD>
<BODY>
<script language=javascript>
var wshNetwork = new ActiveXObject("WScript.Network");
document.write("域名 = "+ wshNetwork.UserDomain+"<br/>");
document.write("計算機名 = "+ wshNetwork.ComputerName+"<br/>");
document.write("登錄用戶名 = "+ wshNetwork.UserName+"<br/>");
</script>
</BODY>
</HTML>
方法五(只針對IE且客戶端的IE允許AcitiveX運行):
能夠獲取到區域網IP地址,本機的MAC,以及機器名(代碼來源網路)。
[html] view plain
<html>
<head>
<title></title>
</head>
<body>
<object classid="CLSID:76A64158-CB41-11D1-8B02-00600806D9B6" id="locator" style="display:none;visibility:hidden"></object>
<object classid="CLSID:75718C9A-F029-11d1-A1AC-00C04FB6C223" id="foo" style="display:none;visibility:hidden"></object>
<form name="myForm">
<br/>MAC地址:<input type="text" name="macAddress">
<br/>IP地址:<input type="text" name="ipAddress">
<br/>主機名:<input type="text" name="hostName">
</form>
</body>
</html>
<script language="javascript">
var sMacAddr="";
var sIPAddr="";
var sDNSName="";
var service = locator.ConnectServer();
service.Security_.ImpersonationLevel=3;
service.InstancesOfAsync(foo, 'Win32_NetworkAdapterConfiguration');
</script>
<script FOR="foo" EVENT="OnObjectReady(objObject,objAsyncContext)" LANGUAGE="JScript">
if(objObject.IPEnabled != null && objObject.IPEnabled != "undefined" && objObject.IPEnabled == true){
if(objObject.IPEnabled && objObject.IPAddress(0) !=null && objObject.IPAddress(0) != "undefined")
sIPAddr = objObject.IPAddress(0);
if(objObject.MACAddress != null &&objObject.MACAddress != "undefined")
sMacAddr = objObject.MACAddress;
if(objObject.DNSHostName != null &&objObject.DNSHostName != "undefined")
sDNSName = objObject.DNSHostName;
}
</script>
<script FOR="foo" EVENT="OnCompleted(hResult,pErrorObject, pAsyncContext)" LANGUAGE="JScript">
myForm.macAddress.value=sMacAddr;
myForm.ipAddress.value=sIPAddr;
myForm.hostName.value=sDNSName;
</script>
⑺ java web項目獲取客戶端ip
static{
Enumeration<?> e1;
try{
e1 = (Enumeration<?>) NetworkInterface.getNetworkInterfaces();
while(e1.hasMoreElements()) {
NetworkInterface ni = (NetworkInterface) e1.nextElement();
if(!.getName().equals("eth0")) {
continue;
}else{
Enumeration<?> e2 = ni.getInetAddresses();
while(e2.hasMoreElements()) {
InetAddress ia = (InetAddress) e2.nextElement();
if(iainstanceofInet6Address){
continue;
}
currentIP= ia.getHostAddress();
}
break;
}
}
}catch(SocketException e) {
e.getMessage();
}
}
⑻ java中如何獲取用戶的IP地址及禁止此人
樓上的方法是不合理的。第一,如果用戶使用代理,是無法獲得真實Ip的0;第二,IF語句不能保證禁止IP,而且很多網站並不需要登錄的。給樓主些方法,可供參考。
1。 獲取用戶IP
public String getRemortIP(HttpServletRequest request) {
if (request.getHeader("x-forwarded-for") == null) {
return request.getRemoteAddr();
}
return request.getHeader("x-forwarded-for");
}
這種方法總是獲得用戶的真實IP
2。禁止IP,可以考慮從伺服器下手
(1) 如果用的是tomcat,那麼在tomcat_home/conf/server.xml中的<host></host>之間加一行代碼:
<Valve className="org.apache.catalina.valves.RemoteAddrValve" deny="192.168.1.1"/>
這樣192.168.1.1這個ip訪問webapp時會收到 403 錯誤
(2) 如果是apache那麼:
<Directory /var/web/dir1>
Allow from all
Deny from 111.111.111.111
</Directory>
上面限制單個IP,限制IP段用*號代替。如111.111.111.*
(3) 或者樓主也可以像樓上說的用代碼實現,給你個JS代碼:
<SCRIPT LANGUAGE="java script">
<!-- Begin
netscape = (navigator.appName.indexOf("Netscape") != -1);
version4 = (navigator.appVersion.indexOf("4.") != -1);
if (netscape && version4) {
ip = "" + java.net.InetAddress.getLocalHost().getHostAddress();
if (ip.indexOf("235.12") >= -1)
// 這是想要禁止訪問的IP例如: 235.12.xxx.xxx
{
alert("You are not permitted to access this site.");
history.go(-1);
}
}
// End -->
</script>
將以上代碼加入到<head>區域中。
⑼ 在java web中怎麼用java代碼獲取訪問者的IP,同時根據訪問者的IP判斷他是屬於那個城市
舉個例子,假設伺服器端運行的是servlet,客戶端(瀏覽器)發送url到伺服器,經過解析,伺服器找到並運行相應的servlet程序,在servlet程序中可以接受到用戶提交的信息,比如用戶提交方式是Get方式,則servlet調用其doGet方法,在doGet方法中,可以通過request獲取用戶提交的數據(包括ip)
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String ip = requset.getRemoteAddr();//獲取客戶端ip
}
獲得了ip後就可以查詢ip所屬地址,可以登錄http://www.ip138.com/
若要自己編寫軟體查詢,就要連接資料庫。