Skip to content

Instantly share code, notes, and snippets.

@iamdvr
Created July 3, 2021 10:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save iamdvr/14cbaf7f5b0bb7722b32740fa4fcd9d5 to your computer and use it in GitHub Desktop.
Save iamdvr/14cbaf7f5b0bb7722b32740fa4fcd9d5 to your computer and use it in GitHub Desktop.
Google Internet Ip Ranges of IpMask To Openvpn Subnet Mask
// Example with java version 11
// java GoogleIpMaskToOpenvpnSubnetMask.java
// --route 8.8.4.0 255.255.255.0 net_gateway 300 --route 8.8.8.0 255.255.255.0 net_gateway 300 --route 8.34.208.0 255.255.240.0 net_gateway 300 --route 8.35.192.0 255.255.240.0 net_gateway 300 --route 23.236.48.0 255.255.240.0 net_gateway 300 --route 23.251.128.0 255.255.224.0 net_gateway 300 --route 34.64.0.0 255.192.0.0 net_gateway 300 --route 34.128.0.0 255.192.0.0 net_gateway 300 --route 35.184.0.0 255.248.0.0 net_gateway 300 --route 35.192.0.0 255.252.0.0 net_gateway 300 --route 35.196.0.0 255.254.0.0 net_gateway 300 --route 35.198.0.0 255.255.0.0 net_gateway 300 --route 35.199.0.0 255.255.128.0 net_gateway 300 --route 35.199.128.0 255.255.192.0 net_gateway 300 --route 35.200.0.0 255.248.0.0 net_gateway 300 --route 35.208.0.0 255.240.0.0 net_gateway 300 --route 35.224.0.0 255.240.0.0 net_gateway 300 --route 35.240.0.0 255.248.0.0 net_gateway 300 --route 64.15.112.0 255.255.240.0 net_gateway 300 --route 64.233.160.0 255.255.224.0 net_gateway 300 --route 66.102.0.0 255.255.240.0 net_gateway 300 --route 66.249.64.0 255.255.224.0 net_gateway 300 --route 70.32.128.0 255.255.224.0 net_gateway 300 --route 72.14.192.0 255.255.192.0 net_gateway 300 --route 74.114.24.0 255.255.248.0 net_gateway 300 --route 74.125.0.0 255.255.0.0 net_gateway 300 --route 104.154.0.0 255.254.0.0 net_gateway 300 --route 104.196.0.0 255.252.0.0 net_gateway 300 --route 104.237.160.0 255.255.224.0 net_gateway 300 --route 107.167.160.0 255.255.224.0 net_gateway 300 --route 107.178.192.0 255.255.192.0 net_gateway 300 --route 108.59.80.0 255.255.240.0 net_gateway 300 --route 108.170.192.0 255.255.192.0 net_gateway 300 --route 108.177.0.0 255.255.128.0 net_gateway 300 --route 130.211.0.0 255.255.0.0 net_gateway 300 --route 136.112.0.0 255.240.0.0 net_gateway 300 --route 142.250.0.0 255.254.0.0 net_gateway 300 --route 146.148.0.0 255.255.128.0 net_gateway 300 --route 162.216.148.0 255.255.252.0 net_gateway 300 --route 162.222.176.0 255.255.248.0 net_gateway 300 --route 172.110.32.0 255.255.248.0 net_gateway 300 --route 172.217.0.0 255.255.0.0 net_gateway 300 --route 172.253.0.0 255.255.0.0 net_gateway 300 --route 173.194.0.0 255.255.0.0 net_gateway 300 --route 173.255.112.0 255.255.240.0 net_gateway 300 --route 192.158.28.0 255.255.252.0 net_gateway 300 --route 192.178.0.0 255.254.0.0 net_gateway 300 --route 193.186.4.0 255.255.255.0 net_gateway 300 --route 199.36.154.0 255.255.254.0 net_gateway 300 --route 199.36.156.0 255.255.255.0 net_gateway 300 --route 199.192.112.0 255.255.252.0 net_gateway 300 --route 199.223.232.0 255.255.248.0 net_gateway 300 --route 207.223.160.0 255.255.240.0 net_gateway 300 --route 208.65.152.0 255.255.252.0 net_gateway 300 --route 208.68.108.0 255.255.252.0 net_gateway 300 --route 208.81.188.0 255.255.252.0 net_gateway 300 --route 208.117.224.0 255.255.224.0 net_gateway 300 --route 209.85.128.0 255.255.128.0 net_gateway 300 --route 216.58.192.0 255.255.224.0 net_gateway 300 --route 216.73.80.0 255.255.240.0 net_gateway 300 --route 216.239.32.0 255.255.224.0 net_gateway 300
import java.util.*;
import java.net.*;
import java.io.*;
import java.util.stream.*;
public class GoogleIpMaskToOpenvpnSubnetMask {
public static void main(String[] args) throws Exception {
var processBuilder = new ProcessBuilder();
processBuilder.command("/bin/sh", "-c","/usr/bin/curl -s https://www.gstatic.com/ipranges/goog.json| /usr/bin/jq '.'|/bin/grep ipv4Prefix|/bin/awk -F \":\" '{print $2}'|/bin/sed 's;\";;g'");
var process = processBuilder.start();
List<String> ipMasks= new ArrayList<String>();
try (var reader = new BufferedReader(new InputStreamReader(process.getInputStream()))) {
ipMasks = reader.lines().map(s -> s.trim()).parallel().collect(Collectors.toList());
}
List<String> routeStr = new ArrayList<String>();
for(String ipMask: ipMasks){
routeStr.add("--route " + ipMaskToSubnetMask(ipMask) + " net_gateway 300");
}
System.out.println(String.join(" ", routeStr));
}
public static String ipMaskToSubnetMask(String ipMask) throws Exception {
String[] parts = ipMask.split("/");
String ip = parts[0];
int prefix;
if (parts.length < 2) {
prefix = 0;
} else {
prefix = Integer.parseInt(parts[1]);
}
int mask = 0xffffffff << (32 - prefix);
//System.err.println("Prefix=" + prefix);
//System.out.println("Address=" + ip);
int value = mask;
byte[] bytes = new byte[]{
(byte)(value >>> 24), (byte)(value >> 16 & 0xff), (byte)(value >> 8 & 0xff), (byte)(value & 0xff) };
InetAddress netAddr = InetAddress.getByAddress(bytes);
//System.out.println("Mask=" + netAddr.getHostAddress());
return ip + " " + netAddr.getHostAddress();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment