JSP页里如何获得自己本机的外网IP? 注意不是局域网IP,也不是127.0.0.1 JSP页里如何获得自己本机的外网IP? 注意不是局域网IP,也不是127.0.0.1 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 import java.net.*;public class GetIp { public static int isInnerIP(long a_ip)//检查ip地址是否是内网ip { int bValid = -1; if ((a_ip >> 24 == 0xa) || (a_ip >> 16 == 0xc0a8) || (a_ip >> 22 == 0x2b0)) { bValid = 0; } return bValid; } // 将127.0.0.1 形式的IP地址转换成10进制整数,这里没有进行任何错误处理 public static long ipToLong(String strIP) { long[] ip = new long[4]; //先找到IP地址字符串中.的位置 int position1 = strIP.indexOf("."); int position2 = strIP.indexOf(".", position1 + 1); int position3 = strIP.indexOf(".", position2 + 1); //将每个.之间的字符串转换成整型 ip[0] = Long.parseLong(strIP.substring(0, position1)); ip[1] = Long.parseLong(strIP.substring(position1 + 1, position2)); ip[2] = Long.parseLong(strIP.substring(position2 + 1, position3)); ip[3] = Long.parseLong(strIP.substring(position3 + 1)); return (ip[0] << 24) + (ip[1] << 16) + (ip[2] << 8) + ip[3]; } public static void main(String[] args) { String ip; try { InetAddress in = InetAddress.getLocalHost(); InetAddress[] all = InetAddress.getAllByName(in.getHostName()); //通过本机主机名,遍历多个ip for (int i = 0; i < all.length; i++) { String tmp=null; tmp=ip=all[i].getHostAddress().toString(); System.out.println("IP = " +tmp);//输出计算机所有的ip地址 if (isInnerIP(ipToLong(tmp)) == -1)//检查是不是外网ip,如果是就保存文件 { /*WriteFile(ip);//将ip地址写入文件 System.out.println("IP保存在同目录IP.txt文件中"); System.out.println("同目录IP.txt文件中的IP是:" + ReadFile());*/ System.out.println(ip); } } } catch (UnknownHostException e) { System.out.println(e.getMessage()); } }} public static String findMyIp()throws Exception{ java.net.URL url = new java.net.URL("http://www.ip138.com/ip2city.asp"); java.net.URLConnection urlConnection = url.openConnection(); urlConnection.setAllowUserInteraction(false); java.io.BufferedReader in = new java.io.BufferedReader(new java.io.InputStreamReader(url.openStream())); String inputLine; String ip=null; while ((inputLine = in.readLine()) != null){ int start=0; int end=0; if((start=inputLine.indexOf("您的IP地址是"))!=-1){ start=inputLine.indexOf("["); end=inputLine.indexOf("]"); ip=inputLine.substring(start+1,end); break; } } in.close(); return ip; } 从网上看到的一种思路,是读取http://www.ip138.com/网页的内容,从里面提取IP地址,但是,读取出来以后才发现,ip地址的内容是放在一个iframe中的,是由http://www.ip138.com/ip2city.asp文件生成的。不知道楼主可否告知还有什么好办法? public class ipServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 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(); } String url = request.getHeader("Referer"); String Trageturl = request.getRequestURL().toString(); response.setContentType("text/html"); response.setCharacterEncoding("UTF-8"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<body>"); out.println("<head>"); out.println("<title>获得真实IP测试</title>"); out.println("</head>"); out.println("<body><font size='2'"); out.println("<b>IP测试例子</b><br>"); out.println("IP: "+ip); out.println("<b>Url测试例子</b><br>"); out.println("url: "+url); out.println("<b>网址测试例子</b><br>"); out.println("Trageturl: "+Trageturl); out.println("</font></body>"); out.println("</html>"); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); } }1个月前自己写的IP测试的servlet例子。供参考。servlet配置 <!-- IP测试 --> <servlet> <servlet-name>ip</servlet-name> <servlet-class>iptest.ipServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>ip</servlet-name> <url-pattern>/iptest</url-pattern> </servlet-mapping>本人一直想把这个放到网站上测试,看是否能得到外网IP。如果有哪个兄弟有自己的个人网站。请帮忙测试下。并告知我。不胜感激。 上次不会引用JAVA代码,这次重新引用下。public class ipServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {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();}String url = request.getHeader("Referer");String Trageturl = request.getRequestURL().toString();response.setContentType("text/html");response.setCharacterEncoding("UTF-8");PrintWriter out = response.getWriter();out.println(" <html>");out.println(" <body>");out.println(" <head>");out.println(" <title>获得真实IP测试 </title>");out.println(" </head>");out.println(" <body> <font size='2'");out.println(" <b>IP测试例子 </b> <br>");out.println("IP: "+ip);out.println(" <b>Url测试例子 </b> <br>");out.println("url: "+url);out.println(" <b>网址测试例子 </b> <br>");out.println("Trageturl: "+Trageturl);out.println(" </font> </body>");out.println(" </html>");}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {this.doGet(request, response);}}<!-- IP测试 --><servlet><servlet-name>ip </servlet-name><servlet-class>iptest.ipServlet </servlet-class></servlet><servlet-mapping><servlet-name>ip </servlet-name><url-pattern>/iptest </url-pattern></servlet-mapping> DWR 推送技术,只能推送一次数据。 两个日期的时间间隔 javaBean上传文件如何写? 图片按钮回车自动提交问题:页面中有两个表单,分别有图片提交按钮,现在在第二个表单中回车不起作用.如何解决?! 通过JAVA 实现IE下点击打印按钮打印页面的效果 servlet在本地测试成功,放在公网以后,站点其他JSP文件可以访问,为什么偏偏无法访问servlet?在线等. DV和PC如何连接呀 有谁能教教我? 下拉列表的问题 大家帮忙,配置jsp问题 誰能帮我看看,为什么同时增加了两条相同的记录。 s:if不能正确显示 jsp为什么在本页显示是中文,但是传值就成乱码了?
public class GetIp { public static int isInnerIP(long a_ip)//检查ip地址是否是内网ip
{
int bValid = -1;
if ((a_ip >> 24 == 0xa) || (a_ip >> 16 == 0xc0a8) || (a_ip >> 22 == 0x2b0))
{
bValid = 0;
}
return bValid;
}
// 将127.0.0.1 形式的IP地址转换成10进制整数,这里没有进行任何错误处理
public static long ipToLong(String strIP)
{
long[] ip = new long[4];
//先找到IP地址字符串中.的位置
int position1 = strIP.indexOf(".");
int position2 = strIP.indexOf(".", position1 + 1);
int position3 = strIP.indexOf(".", position2 + 1);
//将每个.之间的字符串转换成整型
ip[0] = Long.parseLong(strIP.substring(0, position1));
ip[1] = Long.parseLong(strIP.substring(position1 + 1, position2));
ip[2] = Long.parseLong(strIP.substring(position2 + 1, position3));
ip[3] = Long.parseLong(strIP.substring(position3 + 1));
return (ip[0] << 24) + (ip[1] << 16) + (ip[2] << 8) + ip[3];
}
public static void main(String[] args) {
String ip;
try
{
InetAddress in = InetAddress.getLocalHost();
InetAddress[] all = InetAddress.getAllByName(in.getHostName());
//通过本机主机名,遍历多个ip
for (int i = 0; i < all.length; i++)
{
String tmp=null;
tmp=ip=all[i].getHostAddress().toString();
System.out.println("IP = " +tmp);//输出计算机所有的ip地址
if (isInnerIP(ipToLong(tmp)) == -1)//检查是不是外网ip,如果是就保存文件
{
/*WriteFile(ip);//将ip地址写入文件
System.out.println("IP保存在同目录IP.txt文件中"); System.out.println("同目录IP.txt文件中的IP是:" + ReadFile());*/
System.out.println(ip);
}
}
}
catch (UnknownHostException e)
{
System.out.println(e.getMessage());
}
}
}
public static String findMyIp()throws Exception{
java.net.URL url = new java.net.URL("http://www.ip138.com/ip2city.asp");
java.net.URLConnection urlConnection = url.openConnection();
urlConnection.setAllowUserInteraction(false);
java.io.BufferedReader in = new java.io.BufferedReader(new java.io.InputStreamReader(url.openStream()));
String inputLine;
String ip=null;
while ((inputLine = in.readLine()) != null){
int start=0;
int end=0;
if((start=inputLine.indexOf("您的IP地址是"))!=-1){
start=inputLine.indexOf("[");
end=inputLine.indexOf("]");
ip=inputLine.substring(start+1,end);
break;
}
}
in.close();
return ip;
} 从网上看到的一种思路,是读取http://www.ip138.com/网页的内容,从里面提取IP地址,但是,读取出来以后才发现,ip地址的内容是放在一个iframe中的,是由http://www.ip138.com/ip2city.asp文件生成的。
不知道楼主可否告知还有什么好办法?
throws ServletException, IOException {
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();
}
String url = request.getHeader("Referer");
String Trageturl = request.getRequestURL().toString();
response.setContentType("text/html");
response.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<body>");
out.println("<head>");
out.println("<title>获得真实IP测试</title>");
out.println("</head>");
out.println("<body><font size='2'");
out.println("<b>IP测试例子</b><br>");
out.println("IP: "+ip);
out.println("<b>Url测试例子</b><br>");
out.println("url: "+url);
out.println("<b>网址测试例子</b><br>");
out.println("Trageturl: "+Trageturl);
out.println("</font></body>");
out.println("</html>");
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
}
1个月前自己写的IP测试的servlet例子。供参考。servlet配置
<!-- IP测试 -->
<servlet>
<servlet-name>ip</servlet-name>
<servlet-class>iptest.ipServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ip</servlet-name>
<url-pattern>/iptest</url-pattern>
</servlet-mapping>本人一直想把这个放到网站上测试,看是否能得到外网IP。如果有哪个兄弟有自己的个人网站。请帮忙测试下。并告知我。不胜感激。
public class ipServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {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();
}
String url = request.getHeader("Referer");
String Trageturl = request.getRequestURL().toString();
response.setContentType("text/html");
response.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
out.println(" <html>");
out.println(" <body>");
out.println(" <head>");
out.println(" <title>获得真实IP测试 </title>");
out.println(" </head>");
out.println(" <body> <font size='2'");
out.println(" <b>IP测试例子 </b> <br>");
out.println("IP: "+ip);
out.println(" <b>Url测试例子 </b> <br>");
out.println("url: "+url);
out.println(" <b>网址测试例子 </b> <br>");
out.println("Trageturl: "+Trageturl);
out.println(" </font> </body>");
out.println(" </html>");}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {this.doGet(request, response);
}
}<!-- IP测试 -->
<servlet>
<servlet-name>ip </servlet-name>
<servlet-class>iptest.ipServlet </servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ip </servlet-name>
<url-pattern>/iptest </url-pattern>
</servlet-mapping>