您的位置:首页 > 运维架构 > Linux

Java设置Linux外网出口ip

2017-01-12 17:25 162 查看

最近爬虫项目中被封,服务器上绑定了多个ip,就想着怎样才能把多个ip都利用起来,想过设置成代理服务器的想法,但是由于某些原因放弃,所以采用动态改变服务器出口ip的方式将多个ip利用起来。

首先获取服务器绑定的ip

public static void getLocalIps(){
try {
for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
NetworkInterface intf = en.nextElement();
String name = intf.getName();
if (!name.contains("docker") && !name.contains("lo")) {
for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
InetAddress inetAddress = enumIpAddr.nextElement();
if (!inetAddress.isLoopbackAddress()) {
String ipaddress = inetAddress.getHostAddress().toString();
if (!ipaddress.contains("::") && !ipaddress.contains("0:0:") && !ipaddress.contains("fe80")) {
localIps.add(ipaddress);
}
}
}
}
}
} catch (SocketException ex) {
System.out.println("获取ip地址异常");
ex.printStackTrace();
}
}

 

编写切换linux出口ip的脚本

#!/bin/sh
iptables -t nat -I POSTROUTING -o eth0 -d 0.0.0.0/0 -s 192.168.0.1 -j SNAT --to-source $1

 

使用java调用shell脚本,切换出口ip

public static void setOutIp(){
for (String ip : localIps) {
try {
Runtime.getRuntime().exec(ApplicationConfig.prop.getProperty("ipshell")+" "+ip);
logger.info("设置出口ip:"+ip);
if(checkIpCanUsed(null, null)){//查看ip是否可用
return;
}
} catch (IOException e) {
logger.error(e.getMessage());
}
}
}

 

附:查看linux出口ip的方法

 

curl icanhazip.com
curl ifconfig.me
curl curlmyip.com
curl ip.appspot.com
curl ipinfo.io/ip
curl ipecho.net/plain
curl www.trackip.net/i

本文由微儿博客原创,博客地址:www.weare.net.cn 或者点击 微儿博客

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: