java如何动态过去IP地址
关注:283 答案:2 mip版
解决时间 2021-01-24 20:47
提问者等妳¬硪唯一鍀执念
2021-01-24 04:03
java如何动态过去IP地址
最佳答案
二级知识专家选择重头再来
2021-01-24 04:18
package com.babyDuncan.java;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ipServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String ip = getRemoteAddress(request);
System.out.println(ip);
System.out.println(getMACAddress(ip));
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out
.println("HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("");
out.println(" A Servlet");
out.println(" ");
out.print(" This is ");
out.print(this.getClass());
out.println(", using the POST method");
out.println(" ");
out.println("");
out.flush();
out.close();
}
public String getRemoteAddress(HttpServletRequest request) {
String ip = request.getHeader("x-forwarded-for");
if (ip == null || ip.length() == 0 || ip.equalsIgnoreCase("unknown")) {
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || ip.equalsIgnoreCase("unknown")) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || ip.equalsIgnoreCase("unknown")) {
ip = request.getRemoteAddr();
}
return ip;
}
public String getMACAddress(String ip) {
String str = "";
String macAddress = "";
try {
Process p = Runtime.getRuntime().exec("nbtstat -A " + ip);
InputStreamReader ir = new InputStreamReader(p.getInputStream());
LineNumberReader input = new LineNumberReader(ir);
for (int i = 1; i
str = input.readLine();
if (str != null) {
if (str.indexOf("MAC Address") > 1) {
macAddress = str.substring(
str.indexOf("MAC Address") + 14, str.length());
break;
}
}
}
} catch (IOException e) {
e.printStackTrace(System.out);
}
return macAddress;
}
}
全部回答
1楼娇而不傲的猫
2021-01-24 05:09
可以使用正则表达式验证ip地址,ip地址分为v4和v6两个版本,v4为32位,分4段,中间用.隔开,v6为128位,可分为4段32位中间用::隔开。
以下是验证类详细代码:
import java.util.regex.pattern;
public class inetaddressutils {
public static void main(string[] args){
string addr="192.168.1.2";
system.out.println(isipv4address(addr));
}
private static final pattern ipv4_pattern =
pattern.compile(
"^(25[0-5]|2[0-4]\\d|[0-1]?\\d?\\d)(\\.(25[0-5]|2[0-4]\\d|[0-1]?\\d?\\d)){3}$");
private static final pattern ipv6_std_pattern =
pattern.compile(
"^(?:[0-9a-fa-f]{1,4}:){7}[0-9a-fa-f]{1,4}$");
private static final pattern ipv6_hex_compressed_pattern =
pattern.compile(
"^((?:[0-9a-fa-f]{1,4}(?::[0-9a-fa-f]{1,4})*)?)::((?:[0-9a-fa-f]{1,4}(?::[0-9a-fa-f]{1,4})*)?)$");
public static boolean isipv4address(final string input) {
return ipv4_pattern.matcher(input).matches();
}
public static boolean isipv6stdaddress(final string input) {
return ipv6_std_pattern.matcher(input).matches();
}
public static boolean isipv6hexcompressedaddress(final string input) {
return ipv6_hex_compressed_pattern.matcher(input).matches();
}
public static boolean isipv6address(final string input) {
return isipv6stdaddress(input) || isipv6hexcompressedaddress(input);
}
}
我要举报
如以上问答内容为低俗/色情/暴力/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!
→点此我要举报以上信息!←
推荐资讯
大家都在看