diff --git a/CHANGES.md b/CHANGES.md index 9448ce3..7d48e89 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,3 +1,9 @@ +v1.4.0 (2015-10-18) +----------- +* Feature: Protect VpnService +* Change: Black list + + v1.3.0 (2015-10-9) ----------- * Feature: Support ACL diff --git a/Makefile b/Makefile index b8173bc..7352ce8 100644 --- a/Makefile +++ b/Makefile @@ -1,26 +1,23 @@ -all: app/src/main/jniLibs/armeabi/libsystem.so + +LIB_SYSTEM=app/src/main/jniLibs/armeabi/libsystem.so + +all: $(LIB_SYSTEM) .PHONY: clean clean: - $(ANDROID_NDK_HOME)/ndk-build clean rm -rf libs rm -rf app/src/main/jniLibs - rm -rf jni/xsocks/xsocks-android-i686 - rm -rf jni/xsocks/xsocks-android-armv7-a + $(ANDROID_NDK_HOME)/ndk-build clean -app/src/main/jniLibs/armeabi/libsystem.so: jni/system.cpp jni/Android.mk +$(LIB_SYSTEM): jni/system.cpp jni/Android.mk if [ a == a$(ANDROID_NDK_HOME) ]; then \ echo ANDROID_NDK_HOME is not set ;\ exit 1 ;\ fi ;\ pushd jni/xsocks || exit 1 ;\ - if [ ! -f xsocks-android-i686/xsocks ]; then \ - dist-build/android-x86.sh || exit 1 ;\ - fi ;\ - if [ ! -f xsocks-android-armv7-a/xsocks ]; then \ - dist-build/android-armv7-a.sh || exit 1 ;\ - fi ;\ + dist-build/android-x86.sh || exit 1 ;\ + dist-build/android-armv7-a.sh || exit 1 ;\ popd ;\ pushd jni ;\ $(ANDROID_NDK_HOME)/ndk-build NDK_LOG=1 V=0 || exit 1 ;\ @@ -31,14 +28,13 @@ app/src/main/jniLibs/armeabi/libsystem.so: jni/system.cpp jni/Android.mk mkdir -p app/src/main/assets/armeabi-v7a ;\ install -d app/src/main/jniLibs/x86 ;\ install -d app/src/main/jniLibs/armeabi-v7a ;\ - install libs/x86/libsystem.so app/src/main/jniLibs/x86 ;\ - install libs/x86/tun2socks app/src/main/assets/x86 ;\ install libs/x86/pdnsd app/src/main/assets/x86 ;\ - install jni/xsocks/xsocks-android-i686/xsocks app/src/main/assets/x86 ;\ - install jni/xsocks/xsocks-android-i686/xforwarder app/src/main/assets/x86 ;\ - install libs/armeabi-v7a/tun2socks app/src/main/assets/armeabi-v7a ;\ + install libs/x86/tun2socks app/src/main/assets/x86 ;\ + install libs/x86/libsystem.so app/src/main/jniLibs/x86 ;\ install libs/armeabi-v7a/pdnsd app/src/main/assets/armeabi-v7a ;\ + install libs/armeabi-v7a/tun2socks app/src/main/assets/armeabi-v7a ;\ install libs/armeabi-v7a/libsystem.so app/src/main/jniLibs/armeabi-v7a ;\ + install jni/xsocks/xsocks-android-i686/xsocks app/src/main/assets/x86 ;\ + install jni/xsocks/xsocks-android-i686/xforwarder app/src/main/assets/x86 ;\ install jni/xsocks/xsocks-android-armv7-a/xsocks app/src/main/assets/armeabi-v7a ;\ install jni/xsocks/xsocks-android-armv7-a/xforwarder app/src/main/assets/armeabi-v7a ; - diff --git a/app/build.gradle b/app/build.gradle index 38a4a95..383f0f6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -14,8 +14,8 @@ android { applicationId "io.github.xsocks" minSdkVersion 18 targetSdkVersion 23 - versionCode 130 - versionName '1.3.0' + versionCode 140 + versionName '1.4.0' } lintOptions { abortOnError true diff --git a/app/src/main/java/io/github/xsocks/System.java b/app/src/main/java/io/github/xsocks/System.java index 48d544e..7577694 100755 --- a/app/src/main/java/io/github/xsocks/System.java +++ b/app/src/main/java/io/github/xsocks/System.java @@ -7,4 +7,6 @@ public class System { public static native void exec(String cmd); public static native String getABI(); + public static native int sendfd(int fd); + public static native void jniclose(int fd); } diff --git a/app/src/main/java/io/github/xsocks/service/XsocksVpnService.java b/app/src/main/java/io/github/xsocks/service/XsocksVpnService.java index 7d845ba..c46e3da 100644 --- a/app/src/main/java/io/github/xsocks/service/XsocksVpnService.java +++ b/app/src/main/java/io/github/xsocks/service/XsocksVpnService.java @@ -30,8 +30,6 @@ import io.github.xsocks.BuildConfig; import io.github.xsocks.R; import io.github.xsocks.aidl.Config; -import io.github.xsocks.aidl.IXsocksService; -import io.github.xsocks.aidl.IXsocksServiceCallback; import io.github.xsocks.model.ProxiedApp; import io.github.xsocks.ui.AppManagerActivity; import io.github.xsocks.ui.MainActivity; @@ -39,6 +37,9 @@ import io.github.xsocks.utils.ConfigUtils; import io.github.xsocks.utils.Constants; import io.github.xsocks.utils.Utils; +import io.github.xsocks.aidl.IXsocksService; +import io.github.xsocks.aidl.IXsocksServiceCallback; + import rx.schedulers.Schedulers; import rx.util.async.Async; @@ -58,6 +59,8 @@ public class XsocksVpnService extends VpnService { private int callbackCount = 0; private final RemoteCallbackList callbacks = new RemoteCallbackList<>(); + private XsocksVpnThread vpnThread; + private IXsocksService.Stub binder = new IXsocksService.Stub() { @Override public int getState() throws RemoteException { @@ -190,7 +193,7 @@ private void startXsocksDaemon() { } } - String cmd = String.format("%sxsocks -s %s:%d -k %s -p %sxsocks.pid -t 600", + String cmd = String.format("%sxsocks -s %s:%d -k %s -p %sxsocks.pid -t 600 --vpn -V", Constants.Path.BASE, config.proxy, config.remotePort, config.sitekey, Constants.Path.BASE); @@ -207,7 +210,7 @@ private void startXsocksDaemon() { } private void startDnsForwarder() { - String cmd = String.format("%sxforwarder -l 0.0.0.0:%d -d 8.8.8.8:53 " + String cmd = String.format("%sxforwarder -l 0.0.0.0:%d -d 8.8.8.8:53 -V " + "-s %s:%d " + "-k %s " + "-p %sxforwarder.pid", @@ -236,7 +239,7 @@ private void startDnsDaemon() { if (config.route.equals(Constants.Route.BYPASS_CHN)) { content = readFromRaw(R.raw.pdnsd_direct); - conf = String.format(Locale.ENGLISH, content, pdnsdPort, rejectList, blackList, forwarderPort, blackList); + conf = String.format(Locale.ENGLISH, content, pdnsdPort, blackList, forwarderPort, blackList); } else { content = readFromRaw(R.raw.pdnsd_local); @@ -257,7 +260,8 @@ private void startDnsDaemon() { private void route_bypass(Builder builder) { String line; final BufferedReader reader = new BufferedReader( - new InputStreamReader(this.getResources().openRawResource(R.raw.route_bypass))); + new InputStreamReader( + this.getResources().openRawResource(R.raw.route_bypass))); try { while ((line = reader.readLine()) != null) { @@ -266,18 +270,21 @@ private void route_bypass(Builder builder) { builder.addRoute(route[0], Integer.parseInt(route[1])); } } + } catch (final Throwable t) { Log.e(TAG, "", t); + } finally { try { reader.close(); + } catch (final IOException ioe) { // ignore } } } - private void startVpn(){ + private int startVpn(){ int VPN_MTU = 1500; Builder builder = new Builder(); builder.setSession(config.profileName); @@ -297,13 +304,6 @@ private void startVpn(){ builder.addAllowedApplication(app.getPackageName()); } } - - if (config.isBypassApps) { - builder.addDisallowedApplication(this.getPackageName()); - } - - } else { - builder.addDisallowedApplication(this.getPackageName()); } } catch (PackageManager.NameNotFoundException e) { @@ -323,6 +323,7 @@ private void startVpn(){ vpnInterface = builder.establish(); if (vpnInterface == null) { Log.e(TAG, "vpn interface is null"); + return -1; } int fd = vpnInterface.getFd(); @@ -332,7 +333,7 @@ private void startVpn(){ + "--socks-server-addr 127.0.0.1:%d " + "--tunfd %d " + "--tunmtu %d " - + "--loglevel 3 " + + "--loglevel 4 " + "--pid %stun2socks.pid", Constants.Path.BASE, "26.26.26.2", config.localPort, fd, VPN_MTU, Constants.Path.BASE); @@ -343,15 +344,13 @@ private void startVpn(){ cmd += " --dnsgw 26.26.26.1:" + Integer.toString(pdnsdPort); } - if (Utils.isLollipopOrAbove()) { - cmd += " --fake-proc"; - } - if (BuildConfig.DEBUG) { Log.d(TAG, cmd); } io.github.xsocks.System.exec(cmd); + + return fd; } private boolean startDaemons() { @@ -360,11 +359,30 @@ private boolean startDaemons() { startDnsDaemon(); startDnsForwarder(); } - startVpn(); - return true; + + int fd = startVpn(); + if (fd != -1) { + int tries = 1; + while (tries < 5) { + try { + Thread.sleep(1000 * tries); + } catch (InterruptedException e) { + // ignore + } + if (io.github.xsocks.System.sendfd(fd) != -1) { + return true; + } + tries++; + } + } + + return false; } private void startRunner(Config c) { + vpnThread = new XsocksVpnThread(this); + vpnThread.start(); + config = c; // register close closeReceiver @@ -420,6 +438,11 @@ public void onReceive(Context context, Intent intent) { } private void stopRunner() { + if (vpnThread != null) { + vpnThread.stopThread(); + vpnThread = null; + } + stopForeground(true); changeState(Constants.State.STOPPING); diff --git a/app/src/main/java/io/github/xsocks/service/XsocksVpnThread.java b/app/src/main/java/io/github/xsocks/service/XsocksVpnThread.java new file mode 100644 index 0000000..d00dd03 --- /dev/null +++ b/app/src/main/java/io/github/xsocks/service/XsocksVpnThread.java @@ -0,0 +1,112 @@ +package io.github.xsocks.service; + + +import android.net.LocalServerSocket; +import android.net.LocalSocket; +import android.net.LocalSocketAddress; +import android.util.Log; + +import java.io.File; +import java.io.FileDescriptor; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.lang.reflect.Method; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +public class XsocksVpnThread extends Thread { + private String TAG = "XsocksVpnService"; + + private volatile boolean isRunning = true; + private volatile LocalServerSocket serverSocket = null; + + private XsocksVpnService vpnService; + + public XsocksVpnThread(XsocksVpnService vpnService) { + this.vpnService = vpnService; + } + + private void closeServerSocket() { + if (serverSocket != null) { + try { + serverSocket.close(); + } catch (IOException e) { + // ignore + } + serverSocket = null; + } + } + + public void stopThread() { + isRunning = false; + closeServerSocket(); + } + + @Override + public void run() { + String PATH = "/data/data/io.github.xsocks/protect_path"; + + try { + new File(PATH).delete(); + } catch (Exception e) { + } + + try { + LocalSocket localSocket = new LocalSocket(); + localSocket.bind(new LocalSocketAddress(PATH, LocalSocketAddress.Namespace.FILESYSTEM)); + serverSocket = new LocalServerSocket(localSocket.getFileDescriptor()); + + } catch (IOException e) { + Log.e(TAG, "unable to bind", e); + return; + } + + ExecutorService pool = Executors.newFixedThreadPool(4); + + while (isRunning) { + try { + LocalSocket socket = serverSocket.accept(); + + pool.execute(() -> { + try { + InputStream input = socket.getInputStream(); + OutputStream output = socket.getOutputStream(); + + input.read(); + + FileDescriptor[] fds = socket.getAncillaryFileDescriptors(); + + if (fds != null && fds.length > 0) { + Method getInt = FileDescriptor.class.getDeclaredMethod("getInt$"); + int fd = (int) getInt.invoke(fds[0]); + boolean ret = vpnService.protect(fd); + + io.github.xsocks.System.jniclose(fd); + + output.write(ret ? 0 : 1); + + input.close(); + output.close(); + } + + } catch (Exception e) { + Log.e(TAG, "Error when protect socket", e); + } + + // close socket + try { + socket.close(); + } catch (Exception e) { + // ignore + } + }); + + } catch (IOException e) { + Log.e(TAG, "Error when accept socket", e); + return; + } + } + } + +} diff --git a/app/src/main/java/io/github/xsocks/ui/MainActivity.java b/app/src/main/java/io/github/xsocks/ui/MainActivity.java index 0da7d9d..873582b 100644 --- a/app/src/main/java/io/github/xsocks/ui/MainActivity.java +++ b/app/src/main/java/io/github/xsocks/ui/MainActivity.java @@ -335,13 +335,8 @@ private void onStateChanged(int s, String m) { changeSwitch(false); if (m != null) { Snackbar.make(drawer.getDrawerLayout(), - String.format(getString(R.string.vpn_error), m), - Snackbar.LENGTH_LONG) - .setAction("Undo", new View.OnClickListener() { - @Override - public void onClick(View v) { - } - }) + String.format(getString(R.string.vpn_error), m), + Snackbar.LENGTH_LONG) .show(); } prefsFragment.setPreferenceEnabled(true); @@ -463,12 +458,6 @@ private void updateProfile(int id) { }, 600); } - private void recovery() { - progressDialog = ProgressDialog.show(this, "", getString(R.string.initializing), true, false); - serviceStop(); - Async.toAsync(this::reset).call().observeOn(AndroidSchedulers.mainThread()).subscribe(o -> clearDialog()); - } - private void showAbout() { Intent intent = new Intent(this, AboutActivity.class); try { @@ -539,6 +528,12 @@ private void cancelStart() { changeSwitch(false); } + private void recovery() { + progressDialog = ProgressDialog.show(this, "", getString(R.string.initializing), true, false); + serviceStop(); + Async.toAsync(this::reset).call().observeOn(AndroidSchedulers.mainThread()).subscribe(o -> clearDialog()); + } + private void crashRecovery() { ArrayList cmdList = new ArrayList<>(); @@ -572,9 +567,7 @@ private void crashRecovery() { Console.runCommand(cmds); } - private void reset() { - crashRecovery(); - + private void install() { copyAssets(io.github.xsocks.System.getABI()); ArrayList sb = new ArrayList<>(); @@ -586,6 +579,11 @@ private void reset() { Console.runCommand(commands); } + private void reset() { + crashRecovery(); + install(); + } + private void copyAssets(String path) { AssetManager assetManager = getAssets(); String[] files = null; diff --git a/app/src/main/res/raw/dns_black_list b/app/src/main/res/raw/dns_black_list index c81a106..ec94264 100644 --- a/app/src/main/res/raw/dns_black_list +++ b/app/src/main/res/raw/dns_black_list @@ -46,4 +46,9 @@ .blogspot.hk, .blogspot.tw, .wp.com, -.wordpress.com \ No newline at end of file +.wordpress.com, + +.zh.wikipedia.org, +.zh.m.wikipedia.org, + +.telegram.org \ No newline at end of file diff --git a/app/src/main/res/raw/pdnsd_direct b/app/src/main/res/raw/pdnsd_direct index 6551f7d..0f90c10 100644 --- a/app/src/main/res/raw/pdnsd_direct +++ b/app/src/main/res/raw/pdnsd_direct @@ -21,7 +21,6 @@ server { uptest = none; preset = on; timeout = 4; - reject = %s; reject_policy = fail; reject_recursively = on; policy = included; diff --git a/app/src/main/res/raw/route_chn b/app/src/main/res/raw/route_chn index a642bda..e49e0a2 100644 --- a/app/src/main/res/raw/route_chn +++ b/app/src/main/res/raw/route_chn @@ -1,3 +1,4 @@ +0.0.0.0/8 1.0.1.0/24 1.0.2.0/23 1.0.8.0/21 @@ -10,22 +11,15 @@ 1.1.32.0/19 1.2.0.0/23 1.2.2.0/24 -1.2.4.0/24 -1.2.5.0/24 -1.2.6.0/23 -1.2.8.0/24 -1.2.9.0/24 -1.2.10.0/23 -1.2.12.0/22 +1.2.4.0/22 +1.2.8.0/21 1.2.16.0/20 1.2.32.0/19 1.2.64.0/18 1.3.0.0/16 1.4.1.0/24 1.4.2.0/23 -1.4.4.0/24 -1.4.5.0/24 -1.4.6.0/23 +1.4.4.0/22 1.4.8.0/21 1.4.16.0/20 1.4.32.0/19 @@ -41,15 +35,10 @@ 1.12.0.0/14 1.24.0.0/13 1.45.0.0/16 -1.48.0.0/15 -1.50.0.0/16 -1.51.0.0/16 +1.48.0.0/14 1.56.0.0/13 1.68.0.0/14 -1.80.0.0/13 -1.88.0.0/14 -1.92.0.0/15 -1.94.0.0/15 +1.80.0.0/12 1.116.0.0/14 1.180.0.0/14 1.184.0.0/15 @@ -57,6 +46,7 @@ 1.192.0.0/13 1.202.0.0/15 1.204.0.0/14 +10.0.0.0/8 14.0.0.0/21 14.0.12.0/22 14.1.0.0/22 @@ -156,10 +146,7 @@ 42.1.56.0/22 42.1.128.0/17 42.4.0.0/14 -42.48.0.0/15 -42.50.0.0/16 -42.51.0.0/16 -42.52.0.0/14 +42.48.0.0/13 42.56.0.0/14 42.62.0.0/17 42.62.128.0/19 @@ -214,23 +201,13 @@ 42.187.112.0/21 42.187.120.0/22 42.187.128.0/17 -42.192.0.0/15 -42.194.0.0/21 -42.194.8.0/22 -42.194.12.0/22 -42.194.16.0/20 -42.194.32.0/19 -42.194.64.0/18 -42.194.128.0/17 -42.195.0.0/16 -42.196.0.0/14 +42.192.0.0/13 42.201.0.0/17 42.202.0.0/15 42.204.0.0/14 42.208.0.0/12 42.224.0.0/12 -42.240.0.0/17 -42.240.128.0/17 +42.240.0.0/16 42.242.0.0/15 42.244.0.0/14 42.248.0.0/13 @@ -239,8 +216,7 @@ 43.224.44.0/22 43.224.52.0/22 43.224.56.0/22 -43.224.64.0/22 -43.224.68.0/22 +43.224.64.0/21 43.224.72.0/22 43.224.80.0/22 43.224.100.0/22 @@ -249,145 +225,51 @@ 43.224.160.0/22 43.224.176.0/22 43.224.184.0/22 -43.224.200.0/22 -43.224.204.0/22 -43.224.208.0/22 -43.224.212.0/22 +43.224.200.0/21 +43.224.208.0/21 43.224.216.0/22 43.224.224.0/22 43.224.240.0/22 43.225.76.0/22 43.225.84.0/22 -43.225.120.0/22 -43.225.124.0/22 +43.225.120.0/21 43.225.140.0/22 43.225.172.0/22 43.225.180.0/22 43.225.184.0/22 43.225.208.0/22 -43.225.216.0/22 -43.225.220.0/22 -43.225.224.0/22 -43.225.228.0/22 -43.225.232.0/22 -43.225.236.0/22 -43.225.240.0/22 -43.225.244.0/22 +43.225.216.0/21 +43.225.224.0/20 +43.225.240.0/21 43.225.252.0/22 -43.226.32.0/22 -43.226.36.0/22 -43.226.40.0/22 -43.226.44.0/22 -43.226.48.0/22 -43.226.52.0/22 -43.226.56.0/22 -43.226.60.0/22 -43.226.64.0/22 -43.226.68.0/22 -43.226.72.0/22 -43.226.76.0/22 -43.226.80.0/22 -43.226.84.0/22 -43.226.88.0/22 -43.226.92.0/22 -43.226.96.0/22 -43.226.100.0/22 -43.226.104.0/22 -43.226.108.0/22 -43.226.112.0/22 -43.226.116.0/22 +43.226.32.0/19 +43.226.64.0/19 +43.226.96.0/20 +43.226.112.0/21 43.226.120.0/22 -43.226.128.0/22 -43.226.132.0/22 -43.226.136.0/22 -43.226.140.0/22 -43.226.144.0/22 -43.226.148.0/22 -43.226.152.0/22 -43.226.156.0/22 -43.226.160.0/22 -43.226.164.0/22 -43.226.168.0/22 -43.226.172.0/22 -43.226.176.0/22 -43.226.180.0/22 -43.226.184.0/22 -43.226.188.0/22 -43.226.192.0/22 -43.226.196.0/22 -43.226.200.0/22 -43.226.204.0/22 -43.226.208.0/22 -43.226.212.0/22 +43.226.128.0/18 +43.226.192.0/20 +43.226.208.0/21 43.226.236.0/22 -43.226.240.0/22 -43.226.244.0/22 -43.226.248.0/22 -43.226.252.0/22 -43.227.0.0/22 -43.227.4.0/22 +43.226.240.0/20 +43.227.0.0/21 43.227.8.0/22 43.227.28.0/22 -43.227.32.0/22 -43.227.36.0/22 -43.227.40.0/22 -43.227.44.0/22 -43.227.48.0/22 -43.227.52.0/22 -43.227.56.0/22 -43.227.60.0/22 -43.227.64.0/22 -43.227.68.0/22 -43.227.72.0/22 -43.227.76.0/22 -43.227.80.0/22 -43.227.84.0/22 -43.227.88.0/22 -43.227.92.0/22 -43.227.96.0/22 -43.227.100.0/22 +43.227.32.0/19 +43.227.64.0/19 +43.227.96.0/21 43.227.104.0/22 -43.227.136.0/22 -43.227.140.0/22 +43.227.136.0/21 43.227.144.0/22 -43.227.152.0/22 -43.227.156.0/22 -43.227.160.0/22 -43.227.164.0/22 -43.227.168.0/22 -43.227.172.0/22 -43.227.176.0/22 -43.227.180.0/22 +43.227.152.0/21 +43.227.160.0/20 +43.227.176.0/21 43.227.188.0/22 -43.227.192.0/22 -43.227.196.0/22 -43.227.200.0/22 -43.227.204.0/22 -43.227.208.0/22 -43.227.212.0/22 -43.227.216.0/22 -43.227.220.0/22 +43.227.192.0/19 43.227.232.0/22 -43.227.248.0/22 -43.227.252.0/22 -43.228.0.0/22 -43.228.4.0/22 -43.228.8.0/22 -43.228.12.0/22 -43.228.16.0/22 -43.228.20.0/22 -43.228.24.0/22 -43.228.28.0/22 -43.228.32.0/22 -43.228.36.0/22 -43.228.40.0/22 -43.228.44.0/22 -43.228.48.0/22 -43.228.52.0/22 -43.228.56.0/22 -43.228.60.0/22 -43.228.64.0/22 -43.228.68.0/22 +43.227.248.0/21 +43.228.0.0/18 +43.228.64.0/21 43.228.76.0/22 43.228.100.0/22 43.228.116.0/22 @@ -407,21 +289,13 @@ 43.229.96.0/22 43.229.108.0/22 43.229.120.0/22 -43.229.136.0/22 -43.229.140.0/22 +43.229.136.0/21 43.229.144.0/22 -43.229.168.0/22 -43.229.172.0/22 -43.229.176.0/22 -43.229.180.0/22 -43.229.184.0/22 -43.229.188.0/22 -43.229.192.0/22 -43.229.196.0/22 -43.229.216.0/22 -43.229.220.0/22 -43.229.232.0/22 -43.229.236.0/22 +43.229.168.0/21 +43.229.176.0/20 +43.229.192.0/21 +43.229.216.0/21 +43.229.232.0/21 43.230.20.0/22 43.230.32.0/22 43.230.68.0/22 @@ -431,241 +305,18 @@ 43.230.136.0/22 43.230.168.0/22 43.230.220.0/22 -43.230.224.0/22 -43.230.228.0/22 -43.230.232.0/22 -43.230.236.0/22 -43.230.240.0/22 -43.230.244.0/22 -43.230.248.0/22 -43.230.252.0/22 -43.231.32.0/22 -43.231.36.0/22 -43.231.40.0/22 -43.231.44.0/22 -43.231.80.0/22 -43.231.84.0/22 -43.231.88.0/22 -43.231.92.0/22 -43.231.96.0/22 -43.231.100.0/22 -43.231.104.0/22 -43.231.108.0/22 -43.231.136.0/22 -43.231.140.0/22 -43.231.144.0/22 -43.231.148.0/22 -43.231.152.0/22 -43.231.156.0/22 -43.231.160.0/22 -43.231.164.0/22 -43.231.168.0/22 -43.231.172.0/22 -43.231.176.0/22 -43.231.180.0/22 -43.236.0.0/22 -43.236.4.0/22 -43.236.8.0/22 -43.236.12.0/22 -43.236.16.0/22 -43.236.20.0/22 -43.236.24.0/22 -43.236.28.0/22 -43.236.32.0/22 -43.236.36.0/22 -43.236.40.0/22 -43.236.44.0/22 -43.236.48.0/22 -43.236.52.0/22 -43.236.56.0/22 -43.236.60.0/22 -43.236.64.0/22 -43.236.68.0/22 -43.236.72.0/22 -43.236.76.0/22 -43.236.80.0/22 -43.236.84.0/22 -43.236.88.0/22 -43.236.92.0/22 -43.236.96.0/22 -43.236.100.0/22 -43.236.104.0/22 -43.236.108.0/22 -43.236.112.0/22 -43.236.116.0/22 -43.236.120.0/22 -43.236.124.0/22 -43.236.128.0/22 -43.236.132.0/22 -43.236.136.0/22 -43.236.140.0/22 -43.236.144.0/22 -43.236.148.0/22 -43.236.152.0/22 -43.236.156.0/22 -43.236.160.0/22 -43.236.164.0/22 -43.236.168.0/22 -43.236.172.0/22 -43.236.176.0/22 -43.236.180.0/22 -43.236.184.0/22 -43.236.188.0/22 -43.236.192.0/22 -43.236.196.0/22 -43.236.200.0/22 -43.236.204.0/22 -43.236.208.0/22 -43.236.212.0/22 -43.236.216.0/22 -43.236.220.0/22 -43.236.224.0/22 -43.236.228.0/22 -43.236.232.0/22 -43.236.236.0/22 -43.236.240.0/22 -43.236.244.0/22 -43.236.248.0/22 -43.236.252.0/22 -43.237.0.0/22 -43.237.4.0/22 -43.237.8.0/22 -43.237.12.0/22 -43.237.16.0/22 -43.237.20.0/22 -43.237.24.0/22 -43.237.28.0/22 -43.237.32.0/22 -43.237.36.0/22 -43.237.40.0/22 -43.237.44.0/22 -43.237.48.0/22 -43.237.52.0/22 -43.237.56.0/22 -43.237.60.0/22 -43.237.64.0/22 -43.237.68.0/22 -43.237.72.0/22 -43.237.76.0/22 -43.237.80.0/22 -43.237.84.0/22 -43.237.88.0/22 -43.237.92.0/22 -43.237.96.0/22 -43.237.100.0/22 -43.237.104.0/22 -43.237.108.0/22 -43.237.112.0/22 -43.237.116.0/22 -43.237.120.0/22 -43.237.124.0/22 -43.237.128.0/22 -43.237.132.0/22 -43.237.136.0/22 -43.237.140.0/22 -43.237.144.0/22 -43.237.148.0/22 -43.237.152.0/22 -43.237.156.0/22 -43.237.160.0/22 -43.237.164.0/22 -43.237.168.0/22 -43.237.172.0/22 -43.237.176.0/22 -43.237.180.0/22 -43.237.184.0/22 -43.237.188.0/22 -43.237.192.0/22 -43.237.196.0/22 -43.237.200.0/22 -43.237.204.0/22 -43.237.208.0/22 -43.237.212.0/22 -43.237.216.0/22 -43.237.220.0/22 -43.237.224.0/22 -43.237.228.0/22 -43.237.232.0/22 -43.237.236.0/22 -43.237.240.0/22 -43.237.244.0/22 -43.237.248.0/22 -43.237.252.0/22 -43.238.0.0/22 -43.238.4.0/22 -43.238.8.0/22 -43.238.12.0/22 -43.238.16.0/22 -43.238.20.0/22 -43.238.24.0/22 -43.238.28.0/22 -43.238.32.0/22 -43.238.36.0/22 -43.238.40.0/22 -43.238.44.0/22 -43.238.48.0/22 -43.238.52.0/22 -43.238.56.0/22 -43.238.60.0/22 -43.238.64.0/22 -43.238.68.0/22 -43.238.72.0/22 -43.238.76.0/22 -43.238.80.0/22 -43.238.84.0/22 -43.238.88.0/22 -43.238.92.0/22 -43.238.96.0/22 -43.238.100.0/22 -43.238.104.0/22 -43.238.108.0/22 -43.238.112.0/22 -43.238.116.0/22 -43.238.120.0/22 -43.238.124.0/22 -43.238.128.0/22 -43.238.132.0/22 -43.238.136.0/22 -43.238.140.0/22 -43.238.144.0/22 -43.238.148.0/22 -43.238.152.0/22 -43.238.156.0/22 -43.238.160.0/22 -43.238.164.0/22 -43.238.168.0/22 -43.238.172.0/22 -43.238.176.0/22 -43.238.180.0/22 -43.238.184.0/22 -43.238.188.0/22 -43.238.192.0/22 -43.238.196.0/22 -43.238.200.0/22 -43.238.204.0/22 -43.238.208.0/22 -43.238.212.0/22 -43.238.216.0/22 -43.238.220.0/22 -43.238.224.0/22 -43.238.228.0/22 -43.238.232.0/22 -43.238.236.0/22 -43.238.240.0/22 -43.238.244.0/22 -43.238.248.0/22 -43.238.252.0/22 -43.239.0.0/22 -43.239.4.0/22 -43.239.8.0/21 -43.239.16.0/22 -43.239.20.0/22 -43.239.24.0/22 -43.239.28.0/22 -43.239.32.0/22 -43.239.36.0/22 -43.239.40.0/22 -43.239.44.0/22 +43.230.224.0/19 +43.231.32.0/20 +43.231.80.0/20 +43.231.96.0/20 +43.231.136.0/21 +43.231.144.0/20 +43.231.160.0/20 +43.231.176.0/21 +43.236.0.0/15 +43.238.0.0/16 +43.239.0.0/19 +43.239.32.0/20 43.239.48.0/22 43.239.116.0/22 43.239.120.0/22 @@ -673,112 +324,57 @@ 43.239.176.0/22 43.240.0.0/22 43.240.48.0/22 -43.240.56.0/22 -43.240.60.0/22 +43.240.56.0/21 43.240.68.0/22 -43.240.72.0/22 -43.240.76.0/22 +43.240.72.0/21 43.240.84.0/22 43.240.124.0/22 -43.240.128.0/22 -43.240.132.0/22 +43.240.128.0/21 43.240.136.0/22 43.240.156.0/22 -43.240.160.0/22 -43.240.164.0/22 -43.240.168.0/22 -43.240.172.0/22 -43.240.176.0/22 -43.240.180.0/22 -43.240.184.0/22 -43.240.188.0/22 -43.240.192.0/22 -43.240.196.0/22 -43.240.200.0/22 -43.240.204.0/22 -43.240.208.0/22 -43.240.212.0/22 -43.240.216.0/22 -43.240.220.0/22 +43.240.160.0/19 +43.240.192.0/19 43.240.236.0/22 -43.240.240.0/22 -43.240.244.0/22 -43.240.248.0/22 -43.240.252.0/22 -43.241.0.0/22 -43.241.4.0/22 -43.241.8.0/22 -43.241.12.0/22 -43.241.16.0/22 -43.241.20.0/22 +43.240.240.0/20 +43.241.0.0/20 +43.241.16.0/21 43.241.48.0/22 43.241.76.0/22 -43.241.80.0/22 -43.241.84.0/22 -43.241.88.0/22 -43.241.92.0/22 +43.241.80.0/20 43.241.112.0/22 -43.241.168.0/22 -43.241.172.0/22 -43.241.176.0/22 -43.241.180.0/22 +43.241.168.0/21 +43.241.176.0/21 43.241.184.0/22 43.241.196.0/22 -43.241.208.0/22 -43.241.212.0/22 -43.241.216.0/22 -43.241.220.0/22 -43.241.224.0/22 -43.241.228.0/22 -43.241.232.0/22 -43.241.236.0/22 +43.241.208.0/20 +43.241.224.0/20 43.241.240.0/22 -43.241.248.0/22 -43.241.252.0/22 -43.242.8.0/22 -43.242.12.0/22 -43.242.16.0/22 -43.242.20.0/22 -43.242.24.0/22 -43.242.28.0/22 +43.241.248.0/21 +43.242.8.0/21 +43.242.16.0/20 43.242.44.0/22 -43.242.48.0/22 -43.242.52.0/22 -43.242.56.0/22 -43.242.60.0/22 +43.242.48.0/20 43.242.64.0/22 -43.242.72.0/22 -43.242.76.0/22 -43.242.80.0/22 -43.242.84.0/22 -43.242.88.0/22 -43.242.92.0/22 +43.242.72.0/21 +43.242.80.0/20 43.242.96.0/22 -43.242.144.0/22 -43.242.148.0/22 -43.242.152.0/22 -43.242.156.0/22 -43.242.160.0/22 -43.242.164.0/22 +43.242.144.0/20 +43.242.160.0/21 43.242.168.0/22 43.242.180.0/22 43.242.188.0/22 -43.242.192.0/22 -43.242.196.0/22 +43.242.192.0/21 43.242.204.0/22 -43.242.216.0/22 -43.242.220.0/22 +43.242.216.0/21 43.242.252.0/22 43.243.4.0/22 -43.243.8.0/22 -43.243.12.0/22 +43.243.8.0/21 43.243.16.0/22 43.243.24.0/22 43.243.88.0/22 43.243.128.0/22 43.243.136.0/22 -43.243.144.0/22 -43.243.148.0/22 +43.243.144.0/21 43.243.156.0/22 43.243.168.0/22 43.243.180.0/22 @@ -786,30 +382,8 @@ 43.243.228.0/22 43.243.232.0/22 43.243.244.0/22 -43.246.0.0/22 -43.246.4.0/22 -43.246.8.0/22 -43.246.12.0/22 -43.246.16.0/22 -43.246.20.0/22 -43.246.24.0/22 -43.246.28.0/22 -43.246.32.0/22 -43.246.36.0/22 -43.246.40.0/22 -43.246.44.0/22 -43.246.48.0/22 -43.246.52.0/22 -43.246.56.0/22 -43.246.60.0/22 -43.246.64.0/22 -43.246.68.0/22 -43.246.72.0/22 -43.246.76.0/22 -43.246.80.0/22 -43.246.84.0/22 -43.246.88.0/22 -43.246.92.0/22 +43.246.0.0/18 +43.246.64.0/19 43.246.96.0/22 43.246.212.0/22 43.246.228.0/22 @@ -820,129 +394,75 @@ 43.247.68.0/22 43.247.76.0/22 43.247.84.0/22 -43.247.88.0/22 -43.247.92.0/22 -43.247.96.0/22 -43.247.100.0/22 +43.247.88.0/21 +43.247.96.0/21 43.247.108.0/22 43.247.112.0/22 43.247.148.0/22 43.247.152.0/22 -43.247.176.0/22 -43.247.180.0/22 -43.247.184.0/22 -43.247.188.0/22 +43.247.176.0/20 43.247.196.0/22 -43.247.200.0/22 -43.247.204.0/22 -43.247.208.0/22 -43.247.212.0/22 -43.247.216.0/22 -43.247.220.0/22 -43.247.224.0/22 -43.247.228.0/22 -43.247.232.0/22 -43.247.236.0/22 -43.247.240.0/22 -43.247.244.0/22 -43.247.248.0/22 -43.247.252.0/22 -43.248.0.0/22 -43.248.4.0/22 +43.247.200.0/21 +43.247.208.0/20 +43.247.224.0/19 +43.248.0.0/21 43.248.20.0/22 43.248.28.0/22 43.248.48.0/22 43.248.56.0/22 43.248.76.0/22 -43.248.80.0/22 -43.248.84.0/22 -43.248.88.0/22 -43.248.92.0/22 -43.248.96.0/22 -43.248.100.0/22 -43.248.104.0/22 -43.248.108.0/22 -43.248.112.0/22 -43.248.116.0/22 -43.248.120.0/22 -43.248.124.0/22 -43.248.128.0/22 -43.248.132.0/22 -43.248.136.0/22 -43.248.140.0/22 -43.248.144.0/22 -43.248.148.0/22 -43.248.176.0/22 -43.248.180.0/22 -43.248.184.0/22 -43.248.188.0/22 -43.248.192.0/22 -43.248.196.0/22 -43.248.200.0/22 -43.248.204.0/22 +43.248.80.0/20 +43.248.96.0/19 +43.248.128.0/20 +43.248.144.0/21 +43.248.176.0/20 +43.248.192.0/20 43.248.208.0/22 43.248.228.0/22 43.248.232.0/22 43.248.244.0/22 -43.249.0.0/22 -43.249.4.0/22 +43.249.0.0/21 43.249.8.0/22 43.249.24.0/22 43.249.120.0/22 43.249.132.0/22 43.249.136.0/22 -43.249.144.0/22 -43.249.148.0/22 -43.249.152.0/22 -43.249.156.0/22 -43.249.160.0/22 -43.249.164.0/22 +43.249.144.0/20 +43.249.160.0/21 43.249.168.0/22 43.249.192.0/22 43.249.236.0/22 43.250.4.0/22 43.250.12.0/22 -43.250.16.0/22 -43.250.20.0/22 +43.250.16.0/21 43.250.28.0/22 -43.250.32.0/22 -43.250.36.0/22 +43.250.32.0/21 43.250.72.0/22 -43.250.96.0/22 -43.250.100.0/22 -43.250.104.0/22 -43.250.108.0/22 -43.250.112.0/22 -43.250.116.0/22 +43.250.96.0/20 +43.250.112.0/21 43.250.128.0/22 -43.250.144.0/22 -43.250.148.0/22 +43.250.144.0/21 43.250.160.0/22 -43.250.168.0/22 -43.250.172.0/22 +43.250.168.0/21 43.250.176.0/22 43.250.200.0/22 43.250.212.0/22 -43.250.216.0/22 -43.250.220.0/22 +43.250.216.0/21 43.250.236.0/22 43.250.244.0/22 43.251.4.0/22 -43.251.8.0/22 -43.251.12.0/22 +43.251.8.0/21 43.251.16.0/23 43.251.36.0/22 43.251.116.0/22 43.251.192.0/22 -43.251.232.0/22 -43.251.236.0/22 +43.251.232.0/21 43.251.244.0/22 43.252.40.0/22 43.252.48.0/22 43.252.56.0/22 43.252.224.0/22 -43.254.0.0/22 -43.254.4.0/22 +43.254.0.0/21 43.254.8.0/22 43.254.24.0/22 43.254.36.0/22 @@ -951,46 +471,29 @@ 43.254.64.0/22 43.254.72.0/22 43.254.84.0/22 -43.254.88.0/22 -43.254.92.0/22 +43.254.88.0/21 43.254.100.0/22 43.254.104.0/22 -43.254.112.0/22 -43.254.116.0/22 +43.254.112.0/21 43.254.128.0/22 -43.254.136.0/22 -43.254.140.0/22 -43.254.144.0/22 -43.254.148.0/22 -43.254.152.0/22 -43.254.156.0/22 -43.254.168.0/22 -43.254.172.0/22 +43.254.136.0/21 +43.254.144.0/20 +43.254.168.0/21 43.254.180.0/22 -43.254.184.0/22 -43.254.188.0/22 -43.254.192.0/22 -43.254.196.0/22 +43.254.184.0/21 +43.254.192.0/21 43.254.200.0/22 43.254.208.0/22 43.254.220.0/22 -43.254.224.0/22 -43.254.228.0/22 -43.254.232.0/22 -43.254.236.0/22 +43.254.224.0/20 43.254.240.0/22 -43.254.248.0/22 -43.254.252.0/22 -43.255.0.0/22 -43.255.4.0/22 +43.254.248.0/21 +43.255.0.0/21 43.255.8.0/22 43.255.16.0/22 43.255.48.0/22 43.255.60.0/22 -43.255.64.0/22 -43.255.68.0/22 -43.255.72.0/22 -43.255.76.0/22 +43.255.64.0/20 43.255.84.0/22 43.255.96.0/22 43.255.108.0/22 @@ -999,45 +502,30 @@ 43.255.176.0/22 43.255.184.0/22 43.255.192.0/22 -43.255.200.0/22 -43.255.204.0/22 -43.255.208.0/22 -43.255.212.0/22 -43.255.224.0/22 -43.255.228.0/22 +43.255.200.0/21 +43.255.208.0/21 +43.255.224.0/21 43.255.232.0/22 43.255.244.0/22 45.64.112.0/23 45.112.132.0/22 45.112.188.0/22 -45.112.208.0/22 -45.112.212.0/22 -45.112.216.0/22 -45.112.220.0/22 +45.112.208.0/20 45.112.228.0/22 -45.112.232.0/22 -45.112.236.0/22 +45.112.232.0/21 45.113.12.0/22 -45.113.16.0/22 -45.113.20.0/22 -45.113.24.0/22 -45.113.28.0/22 +45.113.16.0/20 45.113.40.0/22 45.113.52.0/22 45.113.56.0/22 45.113.72.0/22 45.113.108.0/22 -45.113.144.0/22 -45.113.148.0/22 +45.113.144.0/21 45.113.168.0/22 45.113.176.0/22 45.113.184.0/22 -45.113.200.0/22 -45.113.204.0/22 -45.113.208.0/22 -45.113.212.0/22 -45.113.216.0/22 -45.113.220.0/22 +45.113.200.0/21 +45.113.208.0/20 45.113.228.0/22 45.113.240.0/22 45.113.252.0/22 @@ -1069,16 +557,13 @@ 45.115.244.0/22 45.115.248.0/22 45.116.12.0/22 -45.116.16.0/22 -45.116.20.0/22 +45.116.16.0/21 45.116.24.0/22 -45.116.32.0/22 -45.116.36.0/22 +45.116.32.0/21 45.116.52.0/22 45.116.60.0/22 45.116.64.0/22 -45.116.96.0/22 -45.116.100.0/22 +45.116.96.0/21 45.116.140.0/22 45.116.152.0/22 45.116.208.0/22 @@ -1090,8 +575,7 @@ 45.117.252.0/22 45.119.52.0/22 45.119.60.0/22 -45.119.64.0/22 -45.119.68.0/22 +45.119.64.0/21 45.119.72.0/22 45.119.104.0/22 45.119.116.0/22 @@ -1105,8 +589,7 @@ 45.120.240.0/22 45.121.20.0/22 45.121.52.0/22 -45.121.64.0/22 -45.121.68.0/22 +45.121.64.0/21 45.121.72.0/22 45.121.92.0/22 45.121.96.0/22 @@ -1114,94 +597,41 @@ 45.121.172.0/22 45.121.176.0/22 45.121.212.0/22 -45.121.240.0/22 -45.121.244.0/22 -45.121.248.0/22 -45.121.252.0/22 -45.122.0.0/22 -45.122.4.0/22 -45.122.8.0/22 -45.122.12.0/22 -45.122.16.0/22 -45.122.20.0/22 -45.122.24.0/22 -45.122.28.0/22 -45.122.32.0/22 -45.122.36.0/22 +45.121.240.0/20 +45.122.0.0/19 +45.122.32.0/21 45.122.40.0/22 45.122.60.0/22 -45.122.64.0/22 -45.122.68.0/22 -45.122.72.0/22 -45.122.76.0/22 -45.122.80.0/22 -45.122.84.0/22 -45.122.88.0/22 -45.122.92.0/22 -45.122.96.0/22 -45.122.100.0/22 -45.122.104.0/22 -45.122.108.0/22 -45.122.112.0/22 -45.122.116.0/22 -45.122.160.0/22 -45.122.164.0/22 -45.122.168.0/22 -45.122.172.0/22 -45.122.176.0/22 -45.122.180.0/22 -45.122.184.0/22 -45.122.188.0/22 -45.122.192.0/22 -45.122.196.0/22 -45.122.200.0/22 -45.122.204.0/22 -45.122.208.0/22 -45.122.212.0/22 +45.122.64.0/19 +45.122.96.0/20 +45.122.112.0/21 +45.122.160.0/19 +45.122.192.0/20 +45.122.208.0/21 45.122.216.0/22 45.123.28.0/22 -45.123.32.0/22 -45.123.36.0/22 +45.123.32.0/21 45.123.44.0/22 -45.123.48.0/22 -45.123.52.0/22 -45.123.56.0/22 -45.123.60.0/22 -45.123.64.0/22 -45.123.68.0/22 -45.123.72.0/22 -45.123.76.0/22 -45.123.80.0/22 -45.123.84.0/22 +45.123.48.0/20 +45.123.64.0/20 +45.123.80.0/21 45.123.88.0/22 45.123.120.0/22 -45.123.128.0/22 -45.123.132.0/22 +45.123.128.0/21 45.123.136.0/22 45.123.148.0/22 -45.123.152.0/22 -45.123.156.0/22 +45.123.152.0/21 45.123.164.0/22 -45.123.168.0/22 -45.123.172.0/22 -45.123.176.0/22 -45.123.180.0/22 +45.123.168.0/21 +45.123.176.0/21 45.123.184.0/22 45.123.204.0/22 45.123.212.0/22 -45.123.224.0/22 -45.123.228.0/22 -45.123.232.0/22 -45.123.236.0/22 -45.123.240.0/22 -45.123.244.0/22 -45.123.248.0/22 -45.123.252.0/22 +45.123.224.0/19 45.124.0.0/22 45.124.20.0/22 45.124.28.0/22 -45.124.32.0/22 -45.124.36.0/22 +45.124.32.0/21 45.124.44.0/22 45.124.68.0/22 45.124.76.0/22 @@ -1211,43 +641,33 @@ 45.124.172.0/22 45.124.176.0/22 45.124.208.0/22 -45.124.248.0/22 -45.124.252.0/22 +45.124.248.0/21 45.125.12.0/22 45.125.16.0/22 -45.125.24.0/22 -45.125.28.0/22 +45.125.24.0/21 45.125.32.0/22 45.125.44.0/22 45.125.52.0/22 45.125.56.0/22 45.125.76.0/22 -45.125.80.0/22 -45.125.84.0/22 -45.125.88.0/22 -45.125.92.0/22 -45.125.96.0/22 -45.125.100.0/22 +45.125.80.0/20 +45.125.96.0/21 45.125.104.0/22 45.125.136.0/22 -45.126.48.0/22 -45.126.52.0/22 +45.126.48.0/21 45.126.100.0/22 45.126.108.0/22 -45.126.112.0/22 -45.126.116.0/22 +45.126.112.0/21 45.126.120.0/22 45.126.212.0/22 45.126.220.0/22 -45.127.8.0/22 -45.127.12.0/22 +45.127.8.0/21 45.127.36.0/22 45.127.96.0/22 45.127.116.0/22 45.127.124.0/22 45.127.128.0/22 -45.127.144.0/22 -45.127.148.0/22 +45.127.144.0/21 45.127.156.0/22 45.127.216.0/22 47.92.0.0/14 @@ -1262,8 +682,7 @@ 49.128.2.0/23 49.140.0.0/15 49.152.0.0/14 -49.208.0.0/15 -49.210.0.0/15 +49.208.0.0/14 49.220.0.0/14 49.232.0.0/14 49.239.0.0/18 @@ -1271,33 +690,15 @@ 49.246.224.0/19 54.222.0.0/15 58.14.0.0/15 -58.16.0.0/16 -58.17.0.0/17 -58.17.128.0/17 -58.18.0.0/16 -58.19.0.0/16 -58.20.0.0/16 -58.21.0.0/16 -58.22.0.0/15 +58.16.0.0/13 58.24.0.0/15 58.30.0.0/15 -58.32.0.0/13 -58.40.0.0/15 -58.42.0.0/16 -58.43.0.0/16 -58.44.0.0/14 -58.48.0.0/13 -58.56.0.0/15 -58.58.0.0/16 -58.59.0.0/17 -58.59.128.0/17 -58.60.0.0/14 +58.32.0.0/11 58.65.232.0/21 58.66.0.0/15 58.68.128.0/17 58.82.0.0/17 -58.83.0.0/17 -58.83.128.0/17 +58.83.0.0/16 58.87.64.0/18 58.99.128.0/17 58.100.0.0/15 @@ -1305,83 +706,28 @@ 58.128.0.0/13 58.144.0.0/16 58.154.0.0/15 -58.192.0.0/15 -58.194.0.0/15 -58.196.0.0/15 -58.198.0.0/15 -58.200.0.0/13 -58.208.0.0/12 -58.240.0.0/15 -58.242.0.0/15 -58.244.0.0/15 -58.246.0.0/15 -58.248.0.0/13 -59.32.0.0/13 -59.40.0.0/15 -59.42.0.0/16 -59.43.0.0/16 -59.44.0.0/14 -59.48.0.0/16 -59.49.0.0/17 -59.49.128.0/17 -59.50.0.0/16 -59.51.0.0/17 -59.51.128.0/17 -59.52.0.0/14 -59.56.0.0/14 -59.60.0.0/15 -59.62.0.0/15 -59.64.0.0/14 -59.68.0.0/14 -59.72.0.0/15 -59.74.0.0/15 -59.76.0.0/16 -59.77.0.0/16 -59.78.0.0/15 -59.80.0.0/15 -59.82.0.0/15 -59.107.0.0/17 -59.107.128.0/17 -59.108.0.0/15 -59.110.0.0/15 +58.192.0.0/11 +58.240.0.0/12 +59.32.0.0/11 +59.64.0.0/12 +59.80.0.0/14 +59.107.0.0/16 +59.108.0.0/14 59.151.0.0/17 +59.153.4.0/22 +59.153.32.0/22 59.155.0.0/16 -59.172.0.0/15 -59.174.0.0/15 +59.172.0.0/14 59.191.0.0/17 59.191.240.0/20 59.192.0.0/10 -60.0.0.0/13 -60.8.0.0/15 -60.10.0.0/16 -60.11.0.0/16 -60.12.0.0/16 -60.13.0.0/18 -60.13.64.0/18 -60.13.128.0/17 -60.14.0.0/15 -60.16.0.0/13 -60.24.0.0/14 -60.28.0.0/15 -60.30.0.0/16 -60.31.0.0/16 +60.0.0.0/11 60.55.0.0/16 60.63.0.0/16 -60.160.0.0/15 -60.162.0.0/15 -60.164.0.0/15 -60.166.0.0/15 -60.168.0.0/13 -60.176.0.0/12 +60.160.0.0/11 60.194.0.0/15 -60.200.0.0/14 -60.204.0.0/16 -60.205.0.0/16 -60.206.0.0/15 -60.208.0.0/13 -60.216.0.0/15 -60.218.0.0/15 -60.220.0.0/14 +60.200.0.0/13 +60.208.0.0/12 60.232.0.0/15 60.235.0.0/16 60.245.128.0/17 @@ -1389,105 +735,27 @@ 60.252.0.0/16 60.253.128.0/17 60.255.0.0/16 -61.4.80.0/22 -61.4.84.0/22 -61.4.88.0/21 +61.4.80.0/20 61.4.176.0/20 61.8.160.0/20 -61.28.0.0/20 -61.28.16.0/20 -61.28.32.0/19 -61.28.64.0/18 -61.29.128.0/18 -61.29.192.0/19 -61.29.224.0/20 -61.29.240.0/20 +61.28.0.0/17 +61.29.128.0/17 61.45.128.0/18 61.45.224.0/20 61.47.128.0/18 -61.48.0.0/14 -61.52.0.0/15 -61.54.0.0/16 -61.55.0.0/16 +61.48.0.0/13 61.87.192.0/18 -61.128.0.0/15 -61.130.0.0/15 -61.132.0.0/16 -61.133.0.0/17 -61.133.128.0/17 -61.134.0.0/18 -61.134.64.0/19 -61.134.96.0/19 -61.134.128.0/18 -61.134.192.0/18 -61.135.0.0/16 -61.136.0.0/18 -61.136.64.0/18 -61.136.128.0/17 -61.137.0.0/17 -61.137.128.0/17 -61.138.0.0/18 -61.138.64.0/18 -61.138.128.0/18 -61.138.192.0/18 -61.139.0.0/17 -61.139.128.0/18 -61.139.192.0/18 -61.140.0.0/14 -61.144.0.0/14 -61.148.0.0/15 -61.150.0.0/15 -61.152.0.0/16 -61.153.0.0/16 -61.154.0.0/15 -61.156.0.0/16 -61.157.0.0/16 -61.158.0.0/17 -61.158.128.0/17 -61.159.0.0/18 -61.159.64.0/18 -61.159.128.0/17 -61.160.0.0/16 -61.161.0.0/18 -61.161.64.0/18 -61.161.128.0/17 -61.162.0.0/16 -61.163.0.0/16 -61.164.0.0/16 -61.165.0.0/16 -61.166.0.0/16 -61.167.0.0/16 -61.168.0.0/16 -61.169.0.0/16 -61.170.0.0/15 -61.172.0.0/14 -61.176.0.0/16 -61.177.0.0/16 -61.178.0.0/16 -61.179.0.0/16 -61.180.0.0/17 -61.180.128.0/17 -61.181.0.0/16 -61.182.0.0/16 -61.183.0.0/16 -61.184.0.0/14 -61.188.0.0/16 -61.189.0.0/17 -61.189.128.0/17 -61.190.0.0/15 +61.128.0.0/10 61.232.0.0/14 61.236.0.0/15 61.240.0.0/14 +100.64.0.0/10 101.0.0.0/22 101.1.0.0/22 101.2.172.0/22 101.4.0.0/14 101.16.0.0/12 -101.32.0.0/14 -101.36.0.0/16 -101.37.0.0/16 -101.38.0.0/15 -101.40.0.0/13 +101.32.0.0/12 101.48.0.0/15 101.50.56.0/22 101.52.0.0/16 @@ -1531,8 +799,7 @@ 101.130.0.0/15 101.132.0.0/14 101.144.0.0/12 -101.192.0.0/14 -101.196.0.0/14 +101.192.0.0/13 101.200.0.0/15 101.203.128.0/19 101.203.160.0/21 @@ -1546,8 +813,7 @@ 101.234.80.0/20 101.234.96.0/19 101.236.0.0/14 -101.240.0.0/14 -101.244.0.0/14 +101.240.0.0/13 101.248.0.0/15 101.251.0.0/22 101.251.8.0/21 @@ -1566,28 +832,14 @@ 103.2.108.0/22 103.2.156.0/22 103.2.164.0/22 -103.2.200.0/22 -103.2.204.0/22 -103.2.208.0/22 -103.2.212.0/22 +103.2.200.0/21 +103.2.208.0/21 103.3.84.0/22 -103.3.88.0/22 -103.3.92.0/22 -103.3.96.0/22 -103.3.100.0/22 -103.3.104.0/22 -103.3.108.0/22 -103.3.112.0/22 -103.3.116.0/22 -103.3.120.0/22 -103.3.124.0/22 -103.3.128.0/22 -103.3.132.0/22 -103.3.136.0/22 -103.3.140.0/22 +103.3.88.0/21 +103.3.96.0/19 +103.3.128.0/20 103.3.148.0/22 -103.3.152.0/22 -103.3.156.0/22 +103.3.152.0/21 103.4.56.0/22 103.4.168.0/22 103.4.184.0/22 @@ -1600,21 +852,18 @@ 103.7.4.0/22 103.7.28.0/22 103.7.212.0/22 -103.7.216.0/22 -103.7.220.0/22 +103.7.216.0/21 103.8.4.0/22 103.8.8.0/22 103.8.32.0/22 103.8.52.0/22 103.8.108.0/22 103.8.156.0/22 -103.8.200.0/22 -103.8.204.0/22 +103.8.200.0/21 103.8.220.0/22 103.9.8.0/22 103.9.152.0/22 -103.9.248.0/22 -103.9.252.0/22 +103.9.248.0/21 103.10.0.0/22 103.10.16.0/22 103.10.84.0/22 @@ -1642,8 +891,7 @@ 103.15.96.0/22 103.15.200.0/22 103.16.52.0/22 -103.16.80.0/22 -103.16.84.0/22 +103.16.80.0/21 103.16.88.0/22 103.16.108.0/22 103.16.124.0/22 @@ -1653,14 +901,11 @@ 103.17.204.0/22 103.17.228.0/22 103.18.192.0/22 -103.18.208.0/22 -103.18.212.0/22 +103.18.208.0/21 103.18.224.0/22 103.19.12.0/22 -103.19.40.0/22 -103.19.44.0/22 -103.19.64.0/22 -103.19.68.0/22 +103.19.40.0/21 +103.19.64.0/21 103.19.72.0/22 103.19.232.0/22 103.20.12.0/22 @@ -1669,51 +914,22 @@ 103.20.128.0/22 103.20.160.0/22 103.20.248.0/22 -103.21.112.0/22 -103.21.116.0/22 -103.21.136.0/22 -103.21.140.0/22 +103.21.112.0/21 +103.21.136.0/21 103.21.176.0/22 103.21.208.0/22 103.21.240.0/22 -103.22.0.0/22 -103.22.4.0/22 -103.22.8.0/22 -103.22.12.0/22 -103.22.16.0/22 -103.22.20.0/22 -103.22.24.0/22 -103.22.28.0/22 -103.22.32.0/22 -103.22.36.0/22 -103.22.40.0/22 -103.22.44.0/22 -103.22.48.0/22 -103.22.52.0/22 -103.22.56.0/22 -103.22.60.0/22 -103.22.64.0/22 -103.22.68.0/22 -103.22.72.0/22 -103.22.76.0/22 -103.22.80.0/22 -103.22.84.0/22 -103.22.88.0/22 -103.22.92.0/22 +103.22.0.0/18 +103.22.64.0/19 103.22.100.0/22 -103.22.104.0/22 -103.22.108.0/22 -103.22.112.0/22 -103.22.116.0/22 -103.22.120.0/22 -103.22.124.0/22 +103.22.104.0/21 +103.22.112.0/20 103.22.188.0/22 103.22.228.0/22 103.22.252.0/22 103.23.8.0/22 103.23.56.0/22 -103.23.160.0/22 -103.23.164.0/22 +103.23.160.0/21 103.23.176.0/22 103.23.228.0/22 103.24.116.0/22 @@ -1723,18 +939,14 @@ 103.24.184.0/22 103.24.220.0/22 103.24.228.0/22 -103.24.248.0/22 -103.24.252.0/22 +103.24.248.0/21 103.25.8.0/23 103.25.20.0/22 -103.25.24.0/22 -103.25.28.0/22 -103.25.32.0/22 -103.25.36.0/22 +103.25.24.0/21 +103.25.32.0/21 103.25.40.0/22 103.25.48.0/22 -103.25.64.0/22 -103.25.68.0/22 +103.25.64.0/21 103.25.148.0/22 103.25.156.0/22 103.25.216.0/22 @@ -1755,8 +967,7 @@ 103.28.8.0/22 103.28.204.0/22 103.29.16.0/22 -103.29.128.0/22 -103.29.132.0/22 +103.29.128.0/21 103.29.136.0/22 103.30.20.0/22 103.30.96.0/22 @@ -1765,220 +976,16 @@ 103.30.228.0/22 103.30.236.0/22 103.31.0.0/22 -103.31.48.0/22 -103.31.52.0/22 -103.31.56.0/22 -103.31.60.0/22 -103.31.64.0/22 -103.31.68.0/22 +103.31.48.0/20 +103.31.64.0/21 103.31.148.0/22 103.31.160.0/22 103.31.168.0/22 103.31.200.0/22 -103.32.0.0/22 -103.32.4.0/22 -103.32.8.0/22 -103.32.12.0/22 -103.32.16.0/22 -103.32.20.0/22 -103.32.24.0/22 -103.32.28.0/22 -103.32.32.0/22 -103.32.36.0/22 -103.32.40.0/22 -103.32.44.0/22 -103.32.48.0/22 -103.32.52.0/22 -103.32.56.0/22 -103.32.60.0/22 -103.32.64.0/22 -103.32.68.0/22 -103.32.72.0/22 -103.32.76.0/22 -103.32.80.0/22 -103.32.84.0/22 -103.32.88.0/22 -103.32.92.0/22 -103.32.96.0/22 -103.32.100.0/22 -103.32.104.0/22 -103.32.108.0/22 -103.32.112.0/22 -103.32.116.0/22 -103.32.120.0/22 -103.32.124.0/22 -103.32.128.0/22 -103.32.132.0/22 -103.32.136.0/22 -103.32.140.0/22 -103.32.144.0/22 -103.32.148.0/22 -103.32.152.0/22 -103.32.156.0/22 -103.32.160.0/22 -103.32.164.0/22 -103.32.168.0/22 -103.32.172.0/22 -103.32.176.0/22 -103.32.180.0/22 -103.32.184.0/22 -103.32.188.0/22 -103.32.192.0/22 -103.32.196.0/22 -103.32.200.0/22 -103.32.204.0/22 -103.32.208.0/22 -103.32.212.0/22 -103.32.216.0/22 -103.32.220.0/22 -103.32.224.0/22 -103.32.228.0/22 -103.32.232.0/22 -103.32.236.0/22 -103.32.240.0/22 -103.32.244.0/22 -103.32.248.0/22 -103.32.252.0/22 -103.33.0.0/22 -103.33.4.0/22 -103.33.8.0/22 -103.33.12.0/22 -103.33.16.0/22 -103.33.20.0/22 -103.33.24.0/22 -103.33.28.0/22 -103.33.32.0/22 -103.33.36.0/22 -103.33.40.0/22 -103.33.44.0/22 -103.33.48.0/22 -103.33.52.0/22 -103.33.56.0/22 -103.33.60.0/22 -103.33.64.0/22 -103.33.68.0/22 -103.33.72.0/22 -103.33.76.0/22 -103.33.80.0/22 -103.33.84.0/22 -103.33.88.0/22 -103.33.92.0/22 -103.33.96.0/22 -103.33.100.0/22 -103.33.104.0/22 -103.33.108.0/22 -103.33.112.0/22 -103.33.116.0/22 -103.33.120.0/22 -103.33.124.0/22 -103.33.128.0/22 -103.33.132.0/22 -103.33.136.0/22 -103.33.140.0/22 -103.33.144.0/22 -103.33.148.0/22 -103.33.152.0/22 -103.33.156.0/22 -103.33.160.0/22 -103.33.164.0/22 -103.33.168.0/22 -103.33.172.0/22 -103.33.176.0/22 -103.33.180.0/22 -103.33.184.0/22 -103.33.188.0/22 -103.33.192.0/22 -103.33.196.0/22 -103.33.200.0/22 -103.33.204.0/22 -103.33.208.0/22 -103.33.212.0/22 -103.33.216.0/22 -103.33.220.0/22 -103.33.224.0/22 -103.33.228.0/22 -103.33.232.0/22 -103.33.236.0/22 -103.33.240.0/22 -103.33.244.0/22 -103.33.248.0/22 -103.33.252.0/22 -103.34.0.0/22 -103.34.4.0/22 -103.34.8.0/22 -103.34.12.0/22 -103.34.16.0/22 -103.34.20.0/22 -103.34.24.0/22 -103.34.28.0/22 -103.34.32.0/22 -103.34.36.0/22 -103.34.40.0/22 -103.34.44.0/22 -103.34.48.0/22 -103.34.52.0/22 -103.34.56.0/22 -103.34.60.0/22 -103.34.64.0/22 -103.34.68.0/22 -103.34.72.0/22 -103.34.76.0/22 -103.34.80.0/22 -103.34.84.0/22 -103.34.88.0/22 -103.34.92.0/22 -103.34.96.0/22 -103.34.100.0/22 -103.34.104.0/22 -103.34.108.0/22 -103.34.112.0/22 -103.34.116.0/22 -103.34.120.0/22 -103.34.124.0/22 -103.34.128.0/22 -103.34.132.0/22 -103.34.136.0/22 -103.34.140.0/22 -103.34.144.0/22 -103.34.148.0/22 -103.34.152.0/22 -103.34.156.0/22 -103.34.160.0/22 -103.34.164.0/22 -103.34.168.0/22 -103.34.172.0/22 -103.34.176.0/22 -103.34.180.0/22 -103.34.184.0/22 -103.34.188.0/22 -103.34.192.0/22 -103.34.196.0/22 -103.34.200.0/22 -103.34.204.0/22 -103.34.208.0/22 -103.34.212.0/22 -103.34.216.0/22 -103.34.220.0/22 -103.34.224.0/22 -103.34.228.0/22 -103.34.232.0/22 -103.34.236.0/22 -103.34.240.0/22 -103.34.244.0/22 -103.34.248.0/22 -103.34.252.0/22 -103.35.0.0/22 -103.35.4.0/22 -103.35.8.0/22 -103.35.12.0/22 -103.35.16.0/22 -103.35.20.0/22 -103.35.24.0/22 -103.35.28.0/22 -103.35.32.0/22 -103.35.36.0/22 -103.35.40.0/22 -103.35.44.0/22 +103.32.0.0/15 +103.34.0.0/16 +103.35.0.0/19 +103.35.32.0/20 103.35.48.0/22 103.35.104.0/22 103.35.116.0/22 @@ -1987,35 +994,16 @@ 103.36.20.0/22 103.36.28.0/22 103.36.36.0/22 -103.36.56.0/22 -103.36.60.0/22 +103.36.56.0/21 103.36.64.0/22 103.36.72.0/22 103.36.96.0/22 103.36.132.0/22 103.36.136.0/22 -103.36.160.0/22 -103.36.164.0/22 -103.36.168.0/22 -103.36.172.0/22 -103.36.176.0/22 -103.36.180.0/22 -103.36.184.0/22 -103.36.188.0/22 -103.36.192.0/22 -103.36.196.0/22 -103.36.200.0/22 -103.36.204.0/22 -103.36.208.0/22 -103.36.212.0/22 -103.36.216.0/22 -103.36.220.0/22 -103.36.224.0/22 -103.36.228.0/22 -103.36.232.0/22 -103.36.236.0/22 -103.36.240.0/22 -103.36.244.0/22 +103.36.160.0/19 +103.36.192.0/19 +103.36.224.0/20 +103.36.240.0/21 103.37.0.0/22 103.37.12.0/22 103.37.16.0/22 @@ -2027,26 +1015,16 @@ 103.37.100.0/22 103.37.104.0/22 103.37.124.0/22 -103.37.136.0/22 -103.37.140.0/22 -103.37.144.0/22 -103.37.148.0/22 -103.37.152.0/22 -103.37.156.0/22 -103.37.160.0/22 -103.37.164.0/22 +103.37.136.0/21 +103.37.144.0/20 +103.37.160.0/21 103.37.172.0/22 103.37.176.0/22 -103.37.208.0/22 -103.37.212.0/22 -103.37.216.0/22 -103.37.220.0/22 -103.37.248.0/22 -103.37.252.0/22 +103.37.208.0/20 +103.37.248.0/21 103.38.0.0/22 103.38.32.0/22 -103.38.40.0/22 -103.38.44.0/22 +103.38.40.0/21 103.38.56.0/22 103.38.76.0/22 103.38.84.0/22 @@ -2056,43 +1034,23 @@ 103.38.132.0/22 103.38.140.0/22 103.38.220.0/22 -103.38.224.0/22 -103.38.228.0/22 +103.38.224.0/21 103.38.232.0/22 103.38.252.0/22 103.39.16.0/22 103.39.64.0/22 103.39.88.0/22 103.39.100.0/22 -103.39.104.0/22 -103.39.108.0/22 +103.39.104.0/21 103.39.144.0/22 -103.39.160.0/22 -103.39.164.0/22 -103.39.168.0/22 -103.39.172.0/22 -103.39.176.0/22 -103.39.180.0/22 -103.39.184.0/22 -103.39.188.0/22 -103.39.200.0/22 -103.39.204.0/22 -103.39.208.0/22 -103.39.212.0/22 -103.39.216.0/22 -103.39.220.0/22 -103.39.224.0/22 -103.39.228.0/22 +103.39.160.0/19 +103.39.200.0/21 +103.39.208.0/20 +103.39.224.0/21 103.39.232.0/22 103.40.12.0/22 -103.40.16.0/22 -103.40.20.0/22 -103.40.24.0/22 -103.40.28.0/22 -103.40.32.0/22 -103.40.36.0/22 -103.40.40.0/22 -103.40.44.0/22 +103.40.16.0/20 +103.40.32.0/20 103.40.88.0/22 103.40.100.0/22 103.40.112.0/22 @@ -2100,12 +1058,8 @@ 103.40.212.0/22 103.40.220.0/22 103.40.228.0/22 -103.40.232.0/22 -103.40.236.0/22 -103.40.240.0/22 -103.40.244.0/22 -103.40.248.0/22 -103.40.252.0/22 +103.40.232.0/21 +103.40.240.0/20 103.41.0.0/22 103.41.16.0/22 103.41.52.0/22 @@ -2113,18 +1067,14 @@ 103.41.140.0/22 103.41.148.0/22 103.41.152.0/22 -103.41.160.0/22 -103.41.164.0/22 +103.41.160.0/21 103.41.220.0/22 -103.41.224.0/22 -103.41.228.0/22 +103.41.224.0/21 103.41.232.0/22 103.42.8.0/22 -103.42.24.0/22 -103.42.28.0/22 +103.42.24.0/21 103.42.32.0/22 -103.42.64.0/22 -103.42.68.0/22 +103.42.64.0/21 103.42.76.0/22 103.42.104.0/22 103.42.180.0/22 @@ -2132,15 +1082,13 @@ 103.43.16.0/22 103.43.24.0/22 103.43.84.0/22 -103.43.96.0/22 -103.43.100.0/22 +103.43.96.0/21 103.43.104.0/22 103.43.124.0/22 103.43.132.0/22 103.43.164.0/22 103.43.184.0/22 -103.43.192.0/22 -103.43.196.0/22 +103.43.192.0/21 103.43.208.0/22 103.43.220.0/22 103.43.224.0/22 @@ -2149,123 +1097,34 @@ 103.44.56.0/22 103.44.80.0/22 103.44.88.0/22 -103.44.120.0/22 -103.44.124.0/22 +103.44.120.0/21 103.44.132.0/22 103.44.144.0/22 103.44.152.0/22 103.44.168.0/22 -103.44.176.0/22 -103.44.180.0/22 -103.44.184.0/22 -103.44.188.0/22 -103.44.192.0/22 -103.44.196.0/22 -103.44.200.0/22 -103.44.204.0/22 +103.44.176.0/20 +103.44.192.0/20 103.44.224.0/22 103.44.236.0/22 -103.44.240.0/22 -103.44.244.0/22 -103.44.248.0/22 -103.44.252.0/22 -103.45.0.0/22 -103.45.4.0/22 -103.45.8.0/22 -103.45.12.0/22 -103.45.16.0/22 -103.45.20.0/22 -103.45.24.0/22 -103.45.28.0/22 -103.45.32.0/22 -103.45.36.0/22 -103.45.40.0/22 -103.45.44.0/22 -103.45.48.0/22 -103.45.52.0/22 -103.45.56.0/22 -103.45.60.0/22 -103.45.72.0/22 -103.45.76.0/22 -103.45.80.0/22 -103.45.84.0/22 -103.45.88.0/22 -103.45.92.0/22 -103.45.96.0/22 -103.45.100.0/22 -103.45.104.0/22 -103.45.108.0/22 -103.45.112.0/22 -103.45.116.0/22 -103.45.120.0/22 -103.45.124.0/22 -103.45.128.0/22 -103.45.132.0/22 -103.45.136.0/22 -103.45.140.0/22 -103.45.144.0/22 -103.45.148.0/22 -103.45.152.0/22 -103.45.156.0/22 -103.45.160.0/22 -103.45.164.0/22 -103.45.168.0/22 -103.45.172.0/22 -103.45.176.0/22 -103.45.180.0/22 -103.45.184.0/22 -103.45.188.0/22 -103.45.192.0/22 -103.45.196.0/22 -103.45.200.0/22 -103.45.204.0/22 -103.45.208.0/22 -103.45.212.0/22 -103.45.216.0/22 -103.45.220.0/22 +103.44.240.0/20 +103.45.0.0/18 +103.45.72.0/21 +103.45.80.0/20 +103.45.96.0/19 +103.45.128.0/18 +103.45.192.0/19 103.45.224.0/22 103.45.248.0/22 103.46.0.0/22 103.46.12.0/22 -103.46.16.0/22 -103.46.20.0/22 -103.46.24.0/22 -103.46.28.0/22 -103.46.32.0/22 -103.46.36.0/22 -103.46.40.0/22 -103.46.44.0/22 -103.46.48.0/22 -103.46.52.0/22 -103.46.56.0/22 -103.46.60.0/22 -103.46.64.0/22 -103.46.68.0/22 -103.46.72.0/22 -103.46.76.0/22 -103.46.80.0/22 -103.46.84.0/22 -103.46.88.0/22 -103.46.92.0/22 -103.46.96.0/22 -103.46.100.0/22 -103.46.104.0/22 -103.46.108.0/22 -103.46.112.0/22 -103.46.116.0/22 -103.46.120.0/22 -103.46.124.0/22 -103.46.128.0/22 -103.46.132.0/22 +103.46.16.0/20 +103.46.32.0/19 +103.46.64.0/18 +103.46.128.0/21 103.46.136.0/22 -103.46.152.0/22 -103.46.156.0/22 -103.46.160.0/22 -103.46.164.0/22 -103.46.168.0/22 -103.46.172.0/22 -103.46.176.0/22 -103.46.180.0/22 +103.46.152.0/21 +103.46.160.0/20 +103.46.176.0/21 103.46.244.0/22 103.46.248.0/22 103.47.4.0/22 @@ -2278,8 +1137,7 @@ 103.47.108.0/22 103.47.116.0/22 103.47.120.0/22 -103.47.136.0/22 -103.47.140.0/22 +103.47.136.0/21 103.47.200.0/22 103.47.212.0/22 103.47.220.0/22 @@ -2287,88 +1145,54 @@ 103.48.20.0/22 103.48.52.0/22 103.48.92.0/22 -103.48.144.0/22 -103.48.148.0/22 -103.48.152.0/22 -103.48.156.0/22 +103.48.144.0/20 103.48.202.0/23 -103.48.216.0/22 -103.48.220.0/22 -103.48.224.0/22 -103.48.228.0/22 -103.48.232.0/22 -103.48.236.0/22 -103.48.240.0/22 -103.48.244.0/22 +103.48.216.0/21 +103.48.224.0/20 +103.48.240.0/21 103.49.12.0/22 103.49.20.0/22 -103.49.72.0/22 -103.49.76.0/22 +103.49.72.0/21 103.49.92.0/22 103.49.96.0/22 103.49.108.0/22 103.49.128.0/22 -103.49.176.0/22 -103.49.180.0/22 +103.49.176.0/21 103.49.196.0/22 103.49.248.0/22 103.50.36.0/22 103.50.44.0/22 -103.50.48.0/22 -103.50.52.0/22 -103.50.56.0/22 -103.50.60.0/22 -103.50.64.0/22 -103.50.68.0/22 +103.50.48.0/20 +103.50.64.0/21 103.50.72.0/22 103.50.108.0/22 -103.50.112.0/22 -103.50.116.0/22 -103.50.120.0/22 -103.50.124.0/22 +103.50.112.0/20 103.50.132.0/22 -103.50.136.0/22 -103.50.140.0/22 +103.50.136.0/21 103.50.172.0/22 -103.50.176.0/22 -103.50.180.0/22 -103.50.184.0/22 -103.50.188.0/22 -103.50.192.0/22 -103.50.196.0/22 +103.50.176.0/20 +103.50.192.0/21 103.50.200.0/22 103.50.220.0/22 -103.50.224.0/22 -103.50.228.0/22 -103.50.232.0/22 -103.50.236.0/22 -103.50.240.0/22 -103.50.244.0/22 +103.50.224.0/20 +103.50.240.0/21 103.50.248.0/22 103.52.40.0/22 -103.52.72.0/22 -103.52.76.0/22 -103.52.80.0/22 -103.52.84.0/22 -103.52.96.0/22 -103.52.100.0/22 +103.52.72.0/21 +103.52.80.0/21 +103.52.96.0/21 103.52.104.0/22 -103.52.160.0/22 -103.52.164.0/22 +103.52.160.0/21 103.52.172.0/22 103.52.176.0/22 103.52.184.0/22 103.52.196.0/22 103.53.4.0/22 -103.53.64.0/22 -103.53.68.0/22 +103.53.64.0/21 103.53.92.0/22 103.53.100.0/22 103.53.124.0/22 -103.53.128.0/22 -103.53.132.0/22 -103.53.136.0/22 -103.53.140.0/22 +103.53.128.0/20 103.53.144.0/22 103.53.160.0/22 103.53.180.0/22 @@ -2380,8 +1204,7 @@ 103.54.8.0/22 103.54.48.0/22 103.54.60.0/22 -103.54.160.0/22 -103.54.164.0/22 +103.54.160.0/21 103.54.212.0/22 103.54.228.0/22 103.54.240.0/22 @@ -2396,14 +1219,11 @@ 103.55.236.0/22 103.55.240.0/22 103.56.8.0/22 -103.56.16.0/22 -103.56.20.0/22 +103.56.16.0/21 103.56.32.0/22 103.56.52.0/22 -103.56.56.0/22 -103.56.60.0/22 -103.56.72.0/22 -103.56.76.0/22 +103.56.56.0/21 +103.56.72.0/21 103.56.100.0/22 103.56.104.0/22 103.56.140.0/22 @@ -2422,10 +1242,7 @@ 103.58.182.0/23 103.59.76.0/22 103.59.100.0/22 -103.59.112.0/22 -103.59.116.0/22 -103.59.120.0/22 -103.59.124.0/22 +103.59.112.0/20 103.59.128.0/22 103.59.148.0/22 103.59.164.0/22 @@ -2438,127 +1255,61 @@ 103.61.60.0/22 103.61.104.0/22 103.61.140.0/22 -103.61.152.0/22 -103.61.156.0/22 +103.61.152.0/21 103.61.160.0/22 103.61.172.0/22 103.61.176.0/22 -103.61.184.0/22 -103.61.188.0/22 +103.61.184.0/21 103.62.24.0/22 103.62.52.0/22 -103.62.72.0/22 -103.62.76.0/22 -103.62.80.0/22 -103.62.84.0/22 +103.62.72.0/21 +103.62.80.0/21 103.62.88.0/22 -103.62.96.0/22 -103.62.100.0/22 -103.62.104.0/22 -103.62.108.0/22 -103.62.112.0/22 -103.62.116.0/22 -103.62.120.0/22 -103.62.124.0/22 -103.62.128.0/22 -103.62.132.0/22 +103.62.96.0/19 +103.62.128.0/21 103.62.156.0/22 -103.62.160.0/22 -103.62.164.0/22 -103.62.168.0/22 -103.62.172.0/22 -103.62.176.0/22 -103.62.180.0/22 -103.62.184.0/22 -103.62.188.0/22 +103.62.160.0/19 103.62.192.0/22 103.62.204.0/22 -103.62.208.0/22 -103.62.212.0/22 -103.62.216.0/22 -103.62.220.0/22 +103.62.208.0/20 103.62.224.0/22 -103.63.32.0/22 -103.63.36.0/22 -103.63.40.0/22 -103.63.44.0/22 -103.63.48.0/22 -103.63.52.0/22 -103.63.56.0/22 -103.63.60.0/22 -103.63.64.0/22 -103.63.68.0/22 -103.63.72.0/22 -103.63.76.0/22 -103.63.80.0/22 -103.63.84.0/22 +103.63.32.0/19 +103.63.64.0/20 +103.63.80.0/21 103.63.88.0/22 103.63.140.0/22 103.63.144.0/22 103.63.152.0/22 -103.63.160.0/22 -103.63.164.0/22 -103.63.168.0/22 -103.63.172.0/22 -103.63.176.0/22 -103.63.180.0/22 +103.63.160.0/20 +103.63.176.0/21 103.63.184.0/22 -103.63.192.0/22 -103.63.196.0/22 -103.63.200.0/22 -103.63.204.0/22 +103.63.192.0/20 103.63.208.0/22 -103.63.240.0/22 -103.63.244.0/22 -103.63.248.0/22 -103.63.252.0/22 -103.192.0.0/22 -103.192.4.0/22 -103.192.8.0/22 -103.192.12.0/22 -103.192.16.0/22 -103.192.20.0/22 -103.192.24.0/22 -103.192.28.0/22 -103.192.48.0/22 -103.192.52.0/22 +103.63.240.0/20 +103.192.0.0/19 +103.192.48.0/21 103.192.56.0/22 103.192.84.0/22 -103.192.88.0/22 -103.192.92.0/22 -103.192.96.0/22 -103.192.100.0/22 -103.192.104.0/22 -103.192.108.0/22 +103.192.88.0/21 +103.192.96.0/20 103.192.112.0/22 -103.192.128.0/22 -103.192.132.0/22 -103.192.136.0/22 -103.192.140.0/22 +103.192.128.0/20 103.192.144.0/22 103.192.164.0/22 103.192.188.0/22 -103.192.208.0/22 -103.192.212.0/22 +103.192.208.0/21 103.192.216.0/22 103.192.252.0/22 -103.193.40.0/22 -103.193.44.0/22 -103.193.120.0/22 -103.193.124.0/22 +103.193.40.0/21 +103.193.120.0/21 103.193.140.0/22 -103.193.144.0/22 -103.193.148.0/22 +103.193.144.0/21 103.193.160.0/22 103.193.188.0/22 103.193.192.0/22 103.193.212.0/22 -103.193.216.0/22 -103.193.220.0/22 -103.193.224.0/22 -103.193.228.0/22 -103.193.232.0/22 -103.193.236.0/22 +103.193.216.0/21 +103.193.224.0/20 103.193.240.0/22 103.194.16.0/22 103.194.230.0/23 @@ -2572,25 +1323,25 @@ 103.196.60.0/22 103.196.64.0/22 103.196.72.0/22 -103.196.88.0/22 -103.196.92.0/22 +103.196.88.0/21 103.196.96.0/22 103.196.168.0/22 103.196.184.0/22 103.196.204.0/22 -103.224.40.0/22 -103.224.44.0/22 +103.197.180.0/22 +103.197.228.0/22 +103.197.252.0/22 +103.198.20.0/22 +103.224.40.0/21 103.224.60.0/22 103.224.80.0/22 103.224.220.0/22 -103.224.224.0/22 -103.224.228.0/22 +103.224.224.0/21 103.224.232.0/22 103.225.84.0/22 103.226.16.0/22 103.226.40.0/22 -103.226.56.0/22 -103.226.60.0/22 +103.226.56.0/21 103.226.80.0/22 103.226.116.0/22 103.226.132.0/22 @@ -2598,8 +1349,7 @@ 103.226.180.0/22 103.226.196.0/22 103.227.48.0/22 -103.227.72.0/22 -103.227.76.0/22 +103.227.72.0/21 103.227.80.0/22 103.227.100.0/22 103.227.120.0/22 @@ -2625,25 +1375,20 @@ 103.229.148.0/22 103.229.172.0/22 103.229.212.0/22 -103.229.216.0/22 -103.229.220.0/22 +103.229.216.0/21 103.229.228.0/22 103.229.236.0/22 103.229.240.0/22 103.230.0.0/22 103.230.28.0/22 -103.230.40.0/22 -103.230.44.0/22 +103.230.40.0/21 103.230.96.0/22 103.230.196.0/22 -103.230.200.0/22 -103.230.204.0/22 +103.230.200.0/21 103.230.212.0/22 103.230.236.0/22 -103.231.16.0/22 -103.231.20.0/22 -103.231.64.0/22 -103.231.68.0/22 +103.231.16.0/21 +103.231.64.0/21 103.231.144.0/22 103.231.180.0/22 103.231.184.0/22 @@ -2668,132 +1413,52 @@ 103.234.244.0/22 103.235.16.0/22 103.235.48.0/22 -103.235.56.0/22 -103.235.60.0/22 -103.235.80.0/22 -103.235.84.0/22 -103.235.128.0/22 -103.235.132.0/22 -103.235.136.0/22 -103.235.140.0/22 -103.235.144.0/22 -103.235.148.0/22 +103.235.56.0/21 +103.235.80.0/21 +103.235.128.0/20 +103.235.144.0/21 103.235.184.0/22 103.235.192.0/22 103.235.200.0/22 103.235.220.0/22 -103.235.224.0/22 -103.235.228.0/22 -103.235.232.0/22 -103.235.236.0/22 -103.235.240.0/22 -103.235.244.0/22 -103.235.248.0/22 -103.235.252.0/22 -103.236.0.0/22 -103.236.4.0/22 -103.236.8.0/22 -103.236.12.0/22 -103.236.16.0/22 -103.236.20.0/22 -103.236.24.0/22 -103.236.28.0/22 -103.236.32.0/22 -103.236.36.0/22 -103.236.40.0/22 -103.236.44.0/22 -103.236.48.0/22 -103.236.52.0/22 -103.236.56.0/22 -103.236.60.0/22 -103.236.64.0/22 -103.236.68.0/22 -103.236.72.0/22 -103.236.76.0/22 -103.236.80.0/22 -103.236.84.0/22 -103.236.88.0/22 -103.236.92.0/22 +103.235.224.0/19 +103.236.0.0/18 +103.236.64.0/19 103.236.96.0/22 103.236.120.0/22 103.236.184.0/22 103.236.220.0/22 103.236.232.0/22 -103.236.240.0/22 -103.236.244.0/22 -103.236.248.0/22 -103.236.252.0/22 -103.237.0.0/22 -103.237.4.0/22 -103.237.8.0/22 -103.237.12.0/22 -103.237.24.0/22 -103.237.28.0/22 +103.236.240.0/20 +103.237.0.0/20 +103.237.24.0/21 103.237.68.0/22 103.237.88.0/22 103.237.152.0/22 -103.237.176.0/22 -103.237.180.0/22 -103.237.184.0/22 -103.237.188.0/22 -103.237.192.0/22 -103.237.196.0/22 -103.237.200.0/22 -103.237.204.0/22 -103.237.208.0/22 -103.237.212.0/22 -103.237.216.0/22 -103.237.220.0/22 -103.237.224.0/22 -103.237.228.0/22 -103.237.232.0/22 -103.237.236.0/22 -103.237.240.0/22 -103.237.244.0/22 -103.237.248.0/22 -103.237.252.0/22 -103.238.0.0/22 -103.238.4.0/22 -103.238.16.0/22 -103.238.20.0/22 -103.238.24.0/22 -103.238.28.0/22 -103.238.32.0/22 -103.238.36.0/22 -103.238.40.0/22 -103.238.44.0/22 -103.238.48.0/22 -103.238.52.0/22 +103.237.176.0/20 +103.237.192.0/18 +103.238.0.0/21 +103.238.16.0/20 +103.238.32.0/20 +103.238.48.0/21 103.238.56.0/22 -103.238.88.0/22 -103.238.92.0/22 +103.238.88.0/21 103.238.96.0/22 103.238.132.0/22 103.238.140.0/22 103.238.144.0/22 -103.238.160.0/22 -103.238.164.0/22 -103.238.168.0/22 -103.238.172.0/22 -103.238.176.0/22 -103.238.180.0/22 -103.238.184.0/22 -103.238.188.0/22 +103.238.160.0/19 103.238.196.0/22 103.238.204.0/22 103.238.252.0/22 103.239.0.0/22 -103.239.40.0/22 -103.239.44.0/22 +103.239.40.0/21 103.239.68.0/22 103.239.96.0/22 -103.239.152.0/22 -103.239.156.0/22 -103.239.176.0/22 -103.239.180.0/22 +103.239.152.0/21 +103.239.176.0/21 103.239.184.0/22 -103.239.192.0/22 -103.239.196.0/22 +103.239.192.0/21 103.239.204.0/22 103.239.208.0/22 103.239.224.0/22 @@ -2811,16 +1476,13 @@ 103.241.92.0/22 103.241.96.0/22 103.241.160.0/22 -103.241.184.0/22 -103.241.188.0/22 +103.241.184.0/21 103.241.220.0/22 103.242.8.0/22 103.242.64.0/22 -103.242.128.0/22 -103.242.132.0/22 +103.242.128.0/21 103.242.160.0/22 -103.242.168.0/22 -103.242.172.0/22 +103.242.168.0/21 103.242.176.0/22 103.242.200.0/22 103.242.212.0/22 @@ -2832,12 +1494,8 @@ 103.244.16.0/22 103.244.58.0/23 103.244.60.0/22 -103.244.64.0/22 -103.244.68.0/22 -103.244.72.0/22 -103.244.76.0/22 -103.244.80.0/22 -103.244.84.0/22 +103.244.64.0/20 +103.244.80.0/21 103.244.164.0/22 103.244.232.0/22 103.244.252.0/22 @@ -2847,15 +1505,11 @@ 103.245.80.0/22 103.245.124.0/22 103.245.128.0/22 -103.246.8.0/22 -103.246.12.0/22 -103.246.120.0/22 -103.246.124.0/22 +103.246.8.0/21 +103.246.120.0/21 103.246.132.0/22 -103.246.152.0/22 -103.246.156.0/22 -103.247.168.0/22 -103.247.172.0/22 +103.246.152.0/21 +103.247.168.0/21 103.247.176.0/22 103.247.200.0/22 103.247.212.0/22 @@ -2867,16 +1521,14 @@ 103.248.168.0/22 103.248.192.0/22 103.248.212.0/22 -103.248.224.0/22 -103.248.228.0/22 +103.248.224.0/21 103.249.12.0/22 103.249.52.0/22 103.249.128.0/22 103.249.136.0/22 103.249.144.0/22 103.249.164.0/22 -103.249.168.0/22 -103.249.172.0/22 +103.249.168.0/21 103.249.176.0/22 103.249.188.0/22 103.249.192.0/22 @@ -2890,8 +1542,7 @@ 103.250.216.0/22 103.250.224.0/22 103.250.236.0/22 -103.250.248.0/22 -103.250.252.0/22 +103.250.248.0/21 103.251.32.0/22 103.251.84.0/22 103.251.96.0/22 @@ -2918,24 +1569,18 @@ 103.253.232.0/22 103.254.8.0/22 103.254.20.0/22 -103.254.64.0/22 -103.254.68.0/22 -103.254.72.0/22 -103.254.76.0/22 +103.254.64.0/20 103.254.112.0/22 103.254.176.0/22 103.254.188.0/22 103.254.196.0/24 103.254.220.0/22 103.255.68.0/22 -103.255.88.0/22 -103.255.92.0/22 -103.255.136.0/22 -103.255.140.0/22 +103.255.88.0/21 +103.255.136.0/21 103.255.184.0/22 103.255.200.0/22 -103.255.208.0/22 -103.255.212.0/22 +103.255.208.0/21 103.255.228.0/22 106.0.0.0/24 106.0.2.0/23 @@ -2954,12 +1599,10 @@ 106.50.0.0/16 106.52.0.0/14 106.56.0.0/13 -106.74.0.0/16 -106.75.0.0/16 +106.74.0.0/15 106.80.0.0/12 106.108.0.0/14 -106.112.0.0/13 -106.120.0.0/13 +106.112.0.0/12 106.224.0.0/12 110.6.0.0/15 110.16.0.0/14 @@ -2971,12 +1614,8 @@ 110.56.0.0/13 110.64.0.0/15 110.72.0.0/15 -110.75.0.0/17 -110.75.128.0/19 -110.75.160.0/19 -110.75.192.0/18 -110.76.0.0/19 -110.76.32.0/19 +110.75.0.0/16 +110.76.0.0/18 110.76.156.0/22 110.76.184.0/22 110.76.192.0/18 @@ -2993,11 +1632,9 @@ 110.172.192.0/18 110.173.0.0/19 110.173.32.0/20 -110.173.64.0/19 -110.173.96.0/19 +110.173.64.0/18 110.173.192.0/19 -110.176.0.0/13 -110.184.0.0/13 +110.176.0.0/12 110.192.0.0/11 110.228.0.0/14 110.232.32.0/19 @@ -3010,8 +1647,7 @@ 111.72.0.0/13 111.85.0.0/16 111.91.192.0/19 -111.112.0.0/15 -111.114.0.0/15 +111.112.0.0/14 111.116.0.0/15 111.118.200.0/21 111.119.64.0/18 @@ -3026,28 +1662,22 @@ 111.176.0.0/13 111.186.0.0/15 111.192.0.0/12 -111.208.0.0/14 -111.212.0.0/14 +111.208.0.0/13 111.221.28.0/24 111.221.128.0/17 111.222.0.0/16 111.223.240.0/22 111.223.248.0/22 -111.224.0.0/14 -111.228.0.0/14 +111.224.0.0/13 111.235.96.0/19 111.235.156.0/22 111.235.160.0/19 112.0.0.0/10 -112.64.0.0/15 -112.66.0.0/15 +112.64.0.0/14 112.73.0.0/16 112.74.0.0/15 -112.80.0.0/13 -112.88.0.0/13 -112.96.0.0/15 -112.98.0.0/15 -112.100.0.0/14 +112.80.0.0/12 +112.96.0.0/13 112.109.128.0/17 112.111.0.0/16 112.112.0.0/14 @@ -3076,10 +1706,7 @@ 113.59.0.0/17 113.59.224.0/22 113.62.0.0/15 -113.64.0.0/11 -113.96.0.0/12 -113.112.0.0/13 -113.120.0.0/13 +113.64.0.0/10 113.128.0.0/15 113.130.96.0/20 113.130.112.0/21 @@ -3116,16 +1743,7 @@ 114.110.64.0/18 114.111.0.0/19 114.111.160.0/19 -114.112.0.0/14 -114.116.0.0/15 -114.118.0.0/16 -114.119.0.0/17 -114.119.128.0/18 -114.119.192.0/21 -114.119.200.0/22 -114.119.204.0/22 -114.119.208.0/20 -114.119.224.0/19 +114.112.0.0/13 114.132.0.0/16 114.135.0.0/16 114.138.0.0/15 @@ -3133,19 +1751,12 @@ 114.141.128.0/18 114.196.0.0/15 114.198.248.0/21 -114.208.0.0/14 -114.212.0.0/15 -114.214.0.0/16 -114.215.0.0/16 -114.216.0.0/13 -114.224.0.0/12 -114.240.0.0/12 +114.208.0.0/12 +114.224.0.0/11 115.24.0.0/14 115.28.0.0/15 115.32.0.0/14 -115.44.0.0/15 -115.46.0.0/16 -115.47.0.0/16 +115.44.0.0/14 115.48.0.0/12 115.69.64.0/20 115.84.0.0/18 @@ -3156,14 +1767,9 @@ 115.120.0.0/14 115.124.16.0/20 115.148.0.0/14 -115.152.0.0/15 -115.154.0.0/15 -115.156.0.0/15 -115.158.0.0/16 -115.159.0.0/16 +115.152.0.0/13 115.166.64.0/19 -115.168.0.0/14 -115.172.0.0/14 +115.168.0.0/13 115.180.0.0/14 115.190.0.0/15 115.192.0.0/11 @@ -3185,8 +1791,7 @@ 116.66.0.0/17 116.69.0.0/16 116.70.0.0/17 -116.76.0.0/15 -116.78.0.0/15 +116.76.0.0/14 116.85.0.0/16 116.89.144.0/20 116.90.80.0/20 @@ -3217,8 +1822,7 @@ 116.216.0.0/14 116.224.0.0/12 116.242.0.0/15 -116.244.0.0/15 -116.246.0.0/15 +116.244.0.0/14 116.248.0.0/15 116.251.64.0/18 116.252.0.0/15 @@ -3240,8 +1844,7 @@ 117.60.0.0/14 117.64.0.0/13 117.72.0.0/15 -117.74.64.0/20 -117.74.80.0/20 +117.74.64.0/19 117.74.128.0/17 117.75.0.0/16 117.76.0.0/14 @@ -3264,9 +1867,7 @@ 117.128.0.0/10 118.24.0.0/15 118.26.0.0/16 -118.28.0.0/15 -118.30.0.0/16 -118.31.0.0/16 +118.28.0.0/14 118.64.0.0/15 118.66.0.0/16 118.67.112.0/20 @@ -3289,29 +1890,14 @@ 118.144.0.0/14 118.178.0.0/16 118.180.0.0/14 -118.184.0.0/17 -118.184.128.0/17 +118.184.0.0/16 118.186.0.0/15 118.188.0.0/16 -118.190.0.0/16 -118.191.0.0/16 -118.192.0.0/16 -118.193.0.0/20 -118.193.16.0/20 -118.193.32.0/19 -118.193.64.0/20 -118.193.80.0/20 -118.193.96.0/19 -118.193.128.0/17 -118.194.0.0/17 -118.194.128.0/17 -118.195.0.0/17 -118.195.128.0/17 -118.196.0.0/14 +118.190.0.0/15 +118.192.0.0/13 118.202.0.0/15 118.204.0.0/14 -118.212.0.0/16 -118.213.0.0/16 +118.212.0.0/15 118.224.0.0/14 118.228.0.0/15 118.230.0.0/16 @@ -3330,43 +1916,28 @@ 119.16.0.0/16 119.18.192.0/20 119.18.208.0/21 -119.18.224.0/20 -119.18.240.0/20 +119.18.224.0/19 119.19.0.0/16 119.20.0.0/14 119.27.64.0/18 -119.27.128.0/19 -119.27.160.0/19 -119.27.192.0/18 +119.27.128.0/17 119.28.0.0/15 119.30.48.0/20 119.31.192.0/19 -119.32.0.0/14 -119.36.0.0/16 -119.37.0.0/17 -119.37.128.0/18 -119.37.192.0/18 -119.38.0.0/17 -119.38.128.0/18 -119.38.192.0/20 -119.38.208.0/20 -119.38.224.0/19 -119.39.0.0/16 +119.32.0.0/13 119.40.0.0/18 119.40.64.0/20 119.40.128.0/17 119.41.0.0/16 119.42.0.0/19 -119.42.128.0/21 -119.42.136.0/21 +119.42.128.0/20 119.42.224.0/19 119.44.0.0/15 119.48.0.0/13 119.57.0.0/16 119.58.0.0/16 119.59.128.0/17 -119.60.0.0/16 -119.61.0.0/16 +119.60.0.0/15 119.62.0.0/16 119.63.32.0/19 119.75.208.0/20 @@ -3377,12 +1948,10 @@ 119.88.0.0/14 119.96.0.0/13 119.108.0.0/15 -119.112.0.0/13 -119.120.0.0/13 +119.112.0.0/12 119.128.0.0/12 119.144.0.0/14 -119.148.160.0/20 -119.148.176.0/20 +119.148.160.0/19 119.151.192.0/18 119.160.200.0/21 119.161.128.0/17 @@ -3398,17 +1967,11 @@ 119.254.0.0/15 120.0.0.0/12 120.24.0.0/14 -120.30.0.0/16 -120.31.0.0/16 -120.32.0.0/13 -120.40.0.0/14 -120.44.0.0/14 +120.30.0.0/15 +120.32.0.0/12 120.48.0.0/15 -120.52.0.0/16 -120.53.0.0/16 -120.54.0.0/15 -120.64.0.0/14 -120.68.0.0/14 +120.52.0.0/14 +120.64.0.0/13 120.72.32.0/19 120.72.128.0/17 120.76.0.0/14 @@ -3416,13 +1979,8 @@ 120.88.8.0/21 120.90.0.0/15 120.92.0.0/16 -120.94.0.0/16 -120.95.0.0/16 -120.128.0.0/14 -120.132.0.0/17 -120.132.128.0/17 -120.133.0.0/16 -120.134.0.0/15 +120.94.0.0/15 +120.128.0.0/13 120.136.128.0/18 120.137.0.0/17 120.143.128.0/19 @@ -3431,15 +1989,8 @@ 121.0.16.0/20 121.4.0.0/15 121.8.0.0/13 -121.16.0.0/13 -121.24.0.0/14 -121.28.0.0/15 -121.30.0.0/16 -121.31.0.0/16 -121.32.0.0/14 -121.36.0.0/16 -121.37.0.0/16 -121.38.0.0/15 +121.16.0.0/12 +121.32.0.0/13 121.40.0.0/14 121.46.0.0/18 121.46.128.0/17 @@ -3466,10 +2017,7 @@ 121.100.128.0/17 121.101.0.0/18 121.101.208.0/20 -121.192.0.0/16 -121.193.0.0/16 -121.194.0.0/15 -121.196.0.0/14 +121.192.0.0/13 121.200.192.0/21 121.201.0.0/16 121.204.0.0/14 @@ -3479,13 +2027,10 @@ 122.0.64.0/18 122.0.128.0/17 122.4.0.0/14 -122.8.0.0/16 -122.9.0.0/16 -122.10.0.0/17 -122.10.128.0/17 +122.8.0.0/15 +122.10.0.0/16 122.11.0.0/17 -122.12.0.0/16 -122.13.0.0/16 +122.12.0.0/15 122.14.0.0/16 122.48.0.0/16 122.49.0.0/18 @@ -3493,8 +2038,7 @@ 122.64.0.0/11 122.96.0.0/15 122.102.0.0/20 -122.102.64.0/20 -122.102.80.0/20 +122.102.64.0/19 122.112.0.0/14 122.119.0.0/16 122.128.120.0/21 @@ -3519,15 +2063,8 @@ 123.49.128.0/17 123.50.160.0/19 123.52.0.0/14 -123.56.0.0/15 -123.58.0.0/17 -123.58.128.0/18 -123.58.192.0/19 -123.58.224.0/20 -123.58.240.0/20 -123.59.0.0/16 -123.60.0.0/16 -123.61.0.0/16 +123.56.0.0/14 +123.60.0.0/15 123.62.0.0/16 123.64.0.0/11 123.96.0.0/15 @@ -3543,23 +2080,14 @@ 123.136.80.0/20 123.137.0.0/16 123.138.0.0/15 -123.144.0.0/14 -123.148.0.0/16 -123.149.0.0/16 -123.150.0.0/15 -123.152.0.0/13 -123.160.0.0/14 -123.164.0.0/14 -123.168.0.0/14 -123.172.0.0/15 -123.174.0.0/15 +123.144.0.0/12 +123.160.0.0/12 123.176.60.0/22 123.176.80.0/20 123.177.0.0/16 123.178.0.0/15 123.180.0.0/14 -123.184.0.0/14 -123.188.0.0/14 +123.184.0.0/13 123.196.0.0/15 123.199.128.0/17 123.206.0.0/15 @@ -3571,67 +2099,38 @@ 124.6.64.0/18 124.14.0.0/15 124.16.0.0/15 -124.20.0.0/16 -124.21.0.0/20 -124.21.16.0/20 -124.21.32.0/19 -124.21.64.0/18 -124.21.128.0/17 -124.22.0.0/15 +124.20.0.0/14 124.28.192.0/18 124.29.0.0/17 124.31.0.0/16 124.40.112.0/20 124.40.128.0/18 124.40.192.0/19 -124.42.0.0/17 -124.42.128.0/17 +124.42.0.0/16 124.47.0.0/18 124.64.0.0/15 124.66.0.0/17 124.67.0.0/16 124.68.0.0/14 -124.72.0.0/16 -124.73.0.0/16 -124.74.0.0/15 -124.76.0.0/14 -124.88.0.0/16 -124.89.0.0/17 -124.89.128.0/17 -124.90.0.0/15 -124.92.0.0/14 +124.72.0.0/13 +124.88.0.0/13 124.108.8.0/21 124.108.40.0/21 124.109.96.0/21 -124.112.0.0/15 -124.114.0.0/15 -124.116.0.0/16 -124.117.0.0/16 -124.118.0.0/15 +124.112.0.0/13 124.126.0.0/15 124.128.0.0/13 124.147.128.0/17 124.151.0.0/16 124.152.0.0/16 124.156.0.0/16 -124.160.0.0/16 -124.161.0.0/16 -124.162.0.0/16 -124.163.0.0/16 -124.164.0.0/14 -124.172.0.0/15 -124.174.0.0/15 +124.160.0.0/13 +124.172.0.0/14 124.192.0.0/15 124.196.0.0/16 124.200.0.0/13 124.220.0.0/14 -124.224.0.0/16 -124.225.0.0/16 -124.226.0.0/15 -124.228.0.0/14 -124.232.0.0/15 -124.234.0.0/15 -124.236.0.0/14 +124.224.0.0/12 124.240.0.0/17 124.240.128.0/18 124.242.0.0/16 @@ -3641,26 +2140,11 @@ 124.250.0.0/15 124.254.0.0/18 125.31.192.0/18 -125.32.0.0/16 -125.33.0.0/16 -125.34.0.0/16 -125.35.0.0/17 -125.35.128.0/17 -125.36.0.0/14 -125.40.0.0/13 +125.32.0.0/12 125.58.128.0/17 125.61.128.0/17 125.62.0.0/18 -125.64.0.0/13 -125.72.0.0/16 -125.73.0.0/16 -125.74.0.0/15 -125.76.0.0/17 -125.76.128.0/17 -125.77.0.0/16 -125.78.0.0/15 -125.80.0.0/13 -125.88.0.0/13 +125.64.0.0/11 125.96.0.0/15 125.98.0.0/16 125.104.0.0/13 @@ -3668,18 +2152,13 @@ 125.169.0.0/16 125.171.0.0/16 125.208.0.0/18 -125.210.0.0/16 -125.211.0.0/16 +125.210.0.0/15 125.213.0.0/17 125.214.96.0/19 125.215.0.0/18 -125.216.0.0/15 -125.218.0.0/16 -125.219.0.0/16 -125.220.0.0/15 -125.222.0.0/15 -125.254.128.0/18 -125.254.192.0/18 +125.216.0.0/13 +125.254.128.0/17 +127.0.0.0/8 139.9.0.0/16 139.129.0.0/16 139.148.0.0/16 @@ -3728,35 +2207,27 @@ 150.129.252.0/22 150.138.0.0/15 150.223.0.0/16 -150.242.0.0/22 -150.242.4.0/22 +150.242.0.0/21 150.242.8.0/22 150.242.28.0/22 150.242.44.0/22 -150.242.48.0/22 -150.242.52.0/22 +150.242.48.0/21 150.242.56.0/22 150.242.76.0/22 150.242.80.0/22 150.242.92.0/22 150.242.96.0/22 -150.242.112.0/22 -150.242.116.0/22 +150.242.112.0/21 150.242.120.0/22 -150.242.152.0/22 -150.242.156.0/22 -150.242.160.0/22 -150.242.164.0/22 +150.242.152.0/21 +150.242.160.0/21 150.242.168.0/22 -150.242.184.0/22 -150.242.188.0/22 +150.242.184.0/21 150.242.192.0/22 150.242.212.0/22 150.242.224.0/22 -150.242.232.0/22 -150.242.236.0/22 -150.242.240.0/22 -150.242.244.0/22 +150.242.232.0/21 +150.242.240.0/21 150.242.248.0/22 150.255.0.0/16 152.104.128.0/17 @@ -3779,35 +2250,16 @@ 162.105.0.0/16 163.0.0.0/16 163.47.4.0/22 -163.53.0.0/22 -163.53.4.0/22 -163.53.8.0/22 -163.53.12.0/22 +163.53.0.0/20 163.53.36.0/22 -163.53.40.0/22 -163.53.44.0/22 -163.53.48.0/22 -163.53.52.0/22 -163.53.56.0/22 -163.53.60.0/22 +163.53.40.0/21 +163.53.48.0/20 163.53.64.0/22 -163.53.88.0/22 -163.53.92.0/22 -163.53.96.0/22 -163.53.100.0/22 -163.53.104.0/22 -163.53.108.0/22 -163.53.112.0/22 -163.53.116.0/22 -163.53.120.0/22 -163.53.124.0/22 -163.53.128.0/22 -163.53.132.0/22 +163.53.88.0/21 +163.53.96.0/19 +163.53.128.0/21 163.53.136.0/22 -163.53.160.0/22 -163.53.164.0/22 -163.53.168.0/22 -163.53.172.0/22 +163.53.160.0/20 163.53.188.0/22 163.53.220.0/22 163.53.240.0/22 @@ -3821,18 +2273,16 @@ 167.189.0.0/16 167.220.244.0/22 168.160.0.0/16 +169.254.0.0/16 171.8.0.0/13 171.34.0.0/15 171.36.0.0/14 171.40.0.0/13 -171.80.0.0/14 -171.84.0.0/14 -171.88.0.0/13 +171.80.0.0/12 171.104.0.0/13 -171.112.0.0/14 -171.116.0.0/14 -171.120.0.0/13 +171.112.0.0/12 171.208.0.0/12 +172.16.0.0/12 175.0.0.0/12 175.16.0.0/13 175.24.0.0/14 @@ -3853,9 +2303,7 @@ 175.185.0.0/16 175.186.0.0/15 175.188.0.0/14 -180.76.0.0/16 -180.77.0.0/16 -180.78.0.0/15 +180.76.0.0/14 180.84.0.0/15 180.86.0.0/16 180.88.0.0/14 @@ -3901,12 +2349,10 @@ 182.51.0.0/16 182.54.0.0/17 182.61.0.0/16 -182.80.0.0/14 -182.84.0.0/14 +182.80.0.0/13 182.88.0.0/14 182.92.0.0/16 -182.96.0.0/12 -182.112.0.0/12 +182.96.0.0/11 182.128.0.0/12 182.144.0.0/13 182.157.0.0/16 @@ -3935,8 +2381,14 @@ 183.182.0.0/19 183.184.0.0/13 183.192.0.0/10 +192.0.0.0/29 +192.0.2.0/24 +192.88.99.0/24 192.124.154.0/24 +192.168.0.0/16 192.188.170.0/24 +198.18.0.0/15 +198.51.100.0/24 202.0.100.0/23 202.0.122.0/23 202.0.176.0/22 @@ -3974,8 +2426,7 @@ 202.12.1.0/24 202.12.2.0/24 202.12.17.0/24 -202.12.18.0/24 -202.12.19.0/24 +202.12.18.0/23 202.12.72.0/24 202.12.84.0/23 202.12.96.0/24 @@ -4018,9 +2469,7 @@ 202.14.226.0/23 202.14.231.0/24 202.14.235.0/24 -202.14.236.0/23 -202.14.238.0/24 -202.14.239.0/24 +202.14.236.0/22 202.14.246.0/24 202.14.251.0/24 202.20.66.0/24 @@ -4044,36 +2493,25 @@ 202.21.152.0/23 202.21.154.0/24 202.21.156.0/24 -202.22.248.0/22 -202.22.252.0/22 +202.22.248.0/21 202.27.136.0/23 -202.38.0.0/23 -202.38.2.0/23 +202.38.0.0/22 202.38.8.0/21 202.38.48.0/20 -202.38.64.0/19 -202.38.96.0/19 -202.38.128.0/23 -202.38.130.0/23 -202.38.132.0/23 -202.38.134.0/24 -202.38.135.0/24 +202.38.64.0/18 +202.38.128.0/21 202.38.136.0/23 202.38.138.0/24 -202.38.140.0/23 -202.38.142.0/23 +202.38.140.0/22 202.38.146.0/23 202.38.149.0/24 202.38.150.0/23 -202.38.152.0/23 -202.38.154.0/23 +202.38.152.0/22 202.38.156.0/24 202.38.158.0/23 202.38.160.0/23 202.38.164.0/22 -202.38.168.0/23 -202.38.170.0/24 -202.38.171.0/24 +202.38.168.0/22 202.38.176.0/23 202.38.184.0/21 202.38.192.0/18 @@ -4164,13 +2602,10 @@ 202.78.8.0/21 202.79.224.0/21 202.79.248.0/22 -202.80.192.0/21 -202.80.200.0/21 +202.80.192.0/20 202.81.0.0/22 202.83.252.0/22 -202.84.0.0/22 -202.84.4.0/22 -202.84.8.0/21 +202.84.0.0/20 202.84.16.0/23 202.84.24.0/21 202.85.208.0/20 @@ -4195,191 +2630,16 @@ 202.93.0.0/22 202.93.252.0/22 202.94.92.0/22 -202.95.0.0/22 -202.95.4.0/22 -202.95.8.0/21 -202.95.16.0/20 +202.95.0.0/19 202.95.240.0/21 202.95.252.0/22 -202.96.0.0/18 -202.96.64.0/21 -202.96.72.0/21 -202.96.80.0/20 -202.96.96.0/21 -202.96.104.0/21 -202.96.112.0/20 -202.96.128.0/21 -202.96.136.0/21 -202.96.144.0/20 -202.96.160.0/21 -202.96.168.0/21 -202.96.176.0/20 -202.96.192.0/21 -202.96.200.0/21 -202.96.208.0/20 -202.96.224.0/21 -202.96.232.0/21 -202.96.240.0/20 -202.97.0.0/21 -202.97.8.0/21 -202.97.16.0/20 -202.97.32.0/19 -202.97.64.0/19 -202.97.96.0/20 -202.97.112.0/20 -202.97.128.0/18 -202.97.192.0/19 -202.97.224.0/21 -202.97.232.0/21 -202.97.240.0/20 -202.98.0.0/21 -202.98.8.0/21 -202.98.16.0/20 -202.98.32.0/21 -202.98.40.0/21 -202.98.48.0/20 -202.98.64.0/19 -202.98.96.0/21 -202.98.104.0/21 -202.98.112.0/20 -202.98.128.0/19 -202.98.160.0/21 -202.98.168.0/21 -202.98.176.0/20 -202.98.192.0/21 -202.98.200.0/21 -202.98.208.0/20 -202.98.224.0/21 -202.98.232.0/21 -202.98.240.0/20 -202.99.0.0/18 -202.99.64.0/19 -202.99.96.0/21 -202.99.104.0/21 -202.99.112.0/20 -202.99.128.0/19 -202.99.160.0/21 -202.99.168.0/21 -202.99.176.0/20 -202.99.192.0/21 -202.99.200.0/21 -202.99.208.0/20 -202.99.224.0/21 -202.99.232.0/21 -202.99.240.0/20 -202.100.0.0/21 -202.100.8.0/21 -202.100.16.0/20 -202.100.32.0/19 -202.100.64.0/21 -202.100.72.0/21 -202.100.80.0/20 -202.100.96.0/21 -202.100.104.0/21 -202.100.112.0/20 -202.100.128.0/21 -202.100.136.0/21 -202.100.144.0/20 -202.100.160.0/21 -202.100.168.0/21 -202.100.176.0/20 -202.100.192.0/21 -202.100.200.0/21 -202.100.208.0/20 -202.100.224.0/19 -202.101.0.0/18 -202.101.64.0/19 -202.101.96.0/19 -202.101.128.0/18 -202.101.192.0/19 -202.101.224.0/21 -202.101.232.0/21 -202.101.240.0/20 -202.102.0.0/19 -202.102.32.0/19 -202.102.64.0/18 -202.102.128.0/21 -202.102.136.0/21 -202.102.144.0/20 -202.102.160.0/19 -202.102.192.0/21 -202.102.200.0/21 -202.102.208.0/20 -202.102.224.0/21 -202.102.232.0/21 -202.102.240.0/20 -202.103.0.0/21 -202.103.8.0/21 -202.103.16.0/20 -202.103.32.0/19 -202.103.64.0/19 -202.103.96.0/21 -202.103.104.0/21 -202.103.112.0/20 -202.103.128.0/18 -202.103.192.0/19 -202.103.224.0/21 -202.103.232.0/21 -202.103.240.0/20 -202.104.0.0/15 -202.106.0.0/16 -202.107.0.0/17 -202.107.128.0/17 -202.108.0.0/16 -202.109.0.0/16 -202.110.0.0/18 -202.110.64.0/18 -202.110.128.0/18 -202.110.192.0/18 -202.111.0.0/17 -202.111.128.0/19 -202.111.160.0/19 -202.111.192.0/18 -202.112.0.0/16 -202.113.0.0/20 -202.113.16.0/20 -202.113.32.0/19 -202.113.64.0/18 -202.113.128.0/18 -202.113.192.0/19 -202.113.224.0/20 -202.113.240.0/20 -202.114.0.0/19 -202.114.32.0/19 -202.114.64.0/18 -202.114.128.0/17 -202.115.0.0/19 -202.115.32.0/19 -202.115.64.0/18 -202.115.128.0/17 -202.116.0.0/19 -202.116.32.0/20 -202.116.48.0/20 -202.116.64.0/19 -202.116.96.0/19 -202.116.128.0/17 -202.117.0.0/18 -202.117.64.0/18 -202.117.128.0/17 -202.118.0.0/19 -202.118.32.0/19 -202.118.64.0/18 -202.118.128.0/17 -202.119.0.0/19 -202.119.32.0/19 -202.119.64.0/20 -202.119.80.0/20 -202.119.96.0/19 -202.119.128.0/17 -202.120.0.0/18 -202.120.64.0/18 -202.120.128.0/17 -202.121.0.0/16 +202.96.0.0/12 +202.112.0.0/13 +202.120.0.0/15 202.122.0.0/21 202.122.32.0/21 202.122.64.0/19 -202.122.112.0/21 -202.122.120.0/21 +202.122.112.0/20 202.122.128.0/24 202.122.132.0/24 202.123.96.0/20 @@ -4389,26 +2649,16 @@ 202.124.24.0/22 202.125.112.0/20 202.125.176.0/20 -202.127.0.0/23 -202.127.2.0/24 -202.127.3.0/24 -202.127.4.0/24 -202.127.5.0/24 -202.127.6.0/23 +202.127.0.0/21 202.127.12.0/22 202.127.16.0/20 202.127.40.0/21 202.127.48.0/20 202.127.112.0/20 -202.127.128.0/20 -202.127.144.0/20 +202.127.128.0/19 202.127.160.0/21 -202.127.192.0/23 -202.127.194.0/23 -202.127.196.0/22 -202.127.200.0/21 -202.127.208.0/24 -202.127.209.0/24 +202.127.192.0/20 +202.127.208.0/23 202.127.212.0/22 202.127.216.0/21 202.127.224.0/19 @@ -4436,8 +2686,7 @@ 202.146.200.0/21 202.147.144.0/20 202.148.32.0/20 -202.148.64.0/19 -202.148.96.0/19 +202.148.64.0/18 202.149.32.0/19 202.149.160.0/19 202.149.224.0/19 @@ -4468,8 +2717,7 @@ 202.165.251.0/24 202.165.252.0/22 202.166.224.0/19 -202.168.160.0/20 -202.168.176.0/20 +202.168.160.0/19 202.170.128.0/19 202.170.216.0/21 202.170.224.0/19 @@ -4496,9 +2744,7 @@ 202.191.68.0/22 202.191.72.0/21 202.191.80.0/20 -202.192.0.0/13 -202.200.0.0/14 -202.204.0.0/14 +202.192.0.0/12 203.0.4.0/22 203.0.10.0/23 203.0.18.0/24 @@ -4511,6 +2757,7 @@ 203.0.90.0/23 203.0.96.0/23 203.0.104.0/21 +203.0.113.0/24 203.0.114.0/23 203.0.122.0/24 203.0.128.0/24 @@ -5311,11 +3558,7 @@ 203.83.0.0/22 203.83.56.0/21 203.83.224.0/20 -203.86.0.0/19 -203.86.32.0/19 -203.86.64.0/20 -203.86.80.0/20 -203.86.96.0/19 +203.86.0.0/17 203.86.254.0/23 203.88.32.0/19 203.88.192.0/19 @@ -5324,38 +3567,17 @@ 203.89.136.0/22 203.90.0.0/22 203.90.8.0/22 -203.90.128.0/19 -203.90.160.0/19 +203.90.128.0/18 203.90.192.0/19 203.91.32.0/19 203.91.96.0/20 203.91.120.0/21 203.92.0.0/22 203.92.160.0/19 -203.93.0.0/22 -203.93.4.0/22 -203.93.8.0/24 -203.93.9.0/24 -203.93.10.0/23 -203.93.12.0/22 -203.93.16.0/20 -203.93.32.0/19 -203.93.64.0/18 -203.93.128.0/21 -203.93.136.0/22 -203.93.140.0/24 -203.93.141.0/24 -203.93.142.0/23 -203.93.144.0/20 -203.93.160.0/19 -203.93.192.0/18 -203.94.0.0/22 -203.94.4.0/22 -203.94.8.0/21 -203.94.16.0/20 +203.93.0.0/16 +203.94.0.0/19 203.95.0.0/21 -203.95.96.0/20 -203.95.112.0/20 +203.95.96.0/19 203.95.128.0/18 203.95.224.0/19 203.99.8.0/21 @@ -5395,8 +3617,7 @@ 203.130.32.0/19 203.132.32.0/19 203.134.240.0/21 -203.135.96.0/20 -203.135.112.0/20 +203.135.96.0/19 203.135.160.0/20 203.142.224.0/19 203.144.96.0/19 @@ -5441,16 +3662,14 @@ 203.191.0.0/23 203.191.16.0/20 203.191.64.0/18 -203.191.144.0/21 -203.191.152.0/21 +203.191.144.0/20 203.192.0.0/19 203.193.224.0/19 203.194.120.0/21 203.195.64.0/19 203.195.112.0/21 203.195.128.0/17 -203.196.0.0/21 -203.196.8.0/21 +203.196.0.0/20 203.202.236.0/22 203.205.64.0/19 203.205.128.0/17 @@ -5466,252 +3685,71 @@ 203.222.192.0/20 203.223.0.0/20 203.223.16.0/21 -210.2.0.0/20 -210.2.16.0/20 +210.2.0.0/19 210.5.0.0/19 210.5.56.0/21 -210.5.128.0/20 -210.5.144.0/20 -210.12.0.0/18 -210.12.64.0/18 -210.12.128.0/18 -210.12.192.0/18 -210.13.0.0/18 -210.13.64.0/18 -210.13.128.0/17 +210.5.128.0/19 +210.12.0.0/15 210.14.64.0/19 210.14.112.0/20 -210.14.128.0/19 -210.14.160.0/19 -210.14.192.0/19 -210.14.224.0/19 -210.15.0.0/19 -210.15.32.0/19 -210.15.64.0/19 -210.15.96.0/19 +210.14.128.0/17 +210.15.0.0/17 210.15.128.0/18 210.16.128.0/18 -210.21.0.0/17 -210.21.128.0/17 +210.21.0.0/16 210.22.0.0/16 210.23.32.0/19 210.25.0.0/16 210.26.0.0/15 210.28.0.0/14 -210.32.0.0/14 -210.36.0.0/14 -210.40.0.0/13 +210.32.0.0/12 210.51.0.0/16 -210.52.0.0/18 -210.52.64.0/18 -210.52.128.0/17 -210.53.0.0/17 -210.53.128.0/17 +210.52.0.0/15 210.56.192.0/19 -210.72.0.0/17 -210.72.128.0/19 -210.72.160.0/19 -210.72.192.0/18 -210.73.0.0/19 -210.73.32.0/19 -210.73.64.0/18 -210.73.128.0/17 -210.74.0.0/19 -210.74.32.0/19 -210.74.64.0/19 -210.74.96.0/19 -210.74.128.0/19 -210.74.160.0/19 -210.74.192.0/18 -210.75.0.0/16 -210.76.0.0/19 -210.76.32.0/19 -210.76.64.0/18 -210.76.128.0/17 -210.77.0.0/16 -210.78.0.0/19 -210.78.32.0/19 -210.78.64.0/18 -210.78.128.0/19 -210.78.160.0/19 -210.78.192.0/18 +210.72.0.0/14 +210.76.0.0/15 +210.78.0.0/16 210.79.64.0/18 210.79.224.0/19 210.82.0.0/15 -210.87.128.0/20 -210.87.144.0/20 -210.87.160.0/19 +210.87.128.0/18 210.185.192.0/18 210.192.96.0/19 -211.64.0.0/14 -211.68.0.0/15 -211.70.0.0/15 -211.80.0.0/16 -211.81.0.0/16 -211.82.0.0/16 -211.83.0.0/16 -211.84.0.0/15 -211.86.0.0/15 -211.88.0.0/16 -211.89.0.0/16 -211.90.0.0/15 -211.92.0.0/15 -211.94.0.0/15 -211.96.0.0/15 -211.98.0.0/16 -211.99.0.0/18 -211.99.64.0/19 -211.99.96.0/19 -211.99.128.0/17 -211.100.0.0/16 -211.101.0.0/18 -211.101.64.0/18 -211.101.128.0/17 -211.102.0.0/16 -211.103.0.0/17 -211.103.128.0/17 -211.136.0.0/14 -211.140.0.0/15 -211.142.0.0/17 -211.142.128.0/17 -211.143.0.0/16 -211.144.0.0/15 -211.146.0.0/16 -211.147.0.0/16 -211.148.0.0/14 -211.152.0.0/15 -211.154.0.0/16 -211.155.0.0/18 -211.155.64.0/19 -211.155.96.0/19 -211.155.128.0/17 -211.156.0.0/14 -211.160.0.0/14 -211.164.0.0/14 -218.0.0.0/16 -218.1.0.0/16 -218.2.0.0/15 -218.4.0.0/15 -218.6.0.0/16 -218.7.0.0/16 -218.8.0.0/15 -218.10.0.0/16 -218.11.0.0/16 -218.12.0.0/16 -218.13.0.0/16 -218.14.0.0/15 -218.16.0.0/14 -218.20.0.0/16 -218.21.0.0/17 -218.21.128.0/17 -218.22.0.0/15 -218.24.0.0/15 -218.26.0.0/16 -218.27.0.0/16 -218.28.0.0/15 -218.30.0.0/15 -218.56.0.0/14 -218.60.0.0/15 -218.62.0.0/17 -218.62.128.0/17 -218.63.0.0/16 -218.64.0.0/15 -218.66.0.0/16 -218.67.0.0/17 -218.67.128.0/17 -218.68.0.0/15 -218.70.0.0/15 -218.72.0.0/14 -218.76.0.0/15 -218.78.0.0/15 -218.80.0.0/14 -218.84.0.0/14 -218.88.0.0/13 -218.96.0.0/15 -218.98.0.0/17 -218.98.128.0/18 -218.98.192.0/19 -218.98.224.0/19 -218.99.0.0/16 +211.64.0.0/13 +211.80.0.0/12 +211.96.0.0/13 +211.136.0.0/13 +211.144.0.0/12 +211.160.0.0/13 +218.0.0.0/11 +218.56.0.0/13 +218.64.0.0/11 +218.96.0.0/14 218.100.88.0/21 218.100.96.0/19 218.100.128.0/17 -218.104.0.0/17 -218.104.128.0/19 -218.104.160.0/19 -218.104.192.0/21 -218.104.200.0/21 -218.104.208.0/20 -218.104.224.0/19 -218.105.0.0/16 -218.106.0.0/15 -218.108.0.0/16 -218.109.0.0/16 +218.104.0.0/14 +218.108.0.0/15 218.185.192.0/19 218.185.240.0/21 -218.192.0.0/16 -218.193.0.0/16 -218.194.0.0/16 -218.195.0.0/16 -218.196.0.0/14 -218.200.0.0/14 -218.204.0.0/15 -218.206.0.0/15 -218.240.0.0/14 -218.244.0.0/15 -218.246.0.0/15 +218.192.0.0/12 +218.240.0.0/13 218.249.0.0/16 219.72.0.0/16 219.82.0.0/16 219.83.128.0/17 -219.128.0.0/12 -219.144.0.0/14 -219.148.0.0/16 -219.149.0.0/17 -219.149.128.0/18 -219.149.192.0/18 -219.150.0.0/19 -219.150.32.0/19 -219.150.64.0/19 -219.150.96.0/20 -219.150.112.0/20 -219.150.128.0/17 -219.151.0.0/19 -219.151.32.0/19 -219.151.64.0/18 -219.151.128.0/17 -219.152.0.0/15 -219.154.0.0/15 -219.156.0.0/15 -219.158.0.0/17 -219.158.128.0/17 -219.159.0.0/18 -219.159.64.0/18 -219.159.128.0/17 -219.216.0.0/15 -219.218.0.0/15 -219.220.0.0/16 -219.221.0.0/16 -219.222.0.0/15 -219.224.0.0/15 -219.226.0.0/16 -219.227.0.0/16 -219.228.0.0/15 -219.230.0.0/15 -219.232.0.0/14 -219.236.0.0/15 -219.238.0.0/15 +219.128.0.0/11 +219.216.0.0/13 +219.224.0.0/12 219.242.0.0/15 219.244.0.0/14 220.101.192.0/18 220.112.0.0/14 220.152.128.0/17 220.154.0.0/15 +220.158.240.0/22 220.160.0.0/11 -220.192.0.0/15 -220.194.0.0/15 -220.196.0.0/14 -220.200.0.0/13 +220.192.0.0/12 220.231.0.0/18 220.231.128.0/17 220.232.64.0/18 @@ -5720,138 +3758,43 @@ 220.247.136.0/21 220.248.0.0/14 220.252.0.0/16 -221.0.0.0/15 -221.2.0.0/16 -221.3.0.0/17 -221.3.128.0/17 -221.4.0.0/16 -221.5.0.0/17 -221.5.128.0/17 -221.6.0.0/16 -221.7.0.0/19 -221.7.32.0/19 -221.7.64.0/19 -221.7.96.0/19 -221.7.128.0/17 -221.8.0.0/15 -221.10.0.0/16 -221.11.0.0/17 -221.11.128.0/18 -221.11.192.0/19 -221.11.224.0/19 +221.0.0.0/13 +221.8.0.0/14 221.12.0.0/17 221.12.128.0/18 -221.13.0.0/18 -221.13.64.0/19 -221.13.96.0/19 -221.13.128.0/17 +221.13.0.0/16 221.14.0.0/15 221.122.0.0/15 221.128.128.0/17 221.129.0.0/16 221.130.0.0/15 221.133.224.0/19 -221.136.0.0/16 -221.137.0.0/16 +221.136.0.0/15 221.172.0.0/14 221.176.0.0/13 -221.192.0.0/15 -221.194.0.0/16 -221.195.0.0/16 +221.192.0.0/14 221.196.0.0/15 221.198.0.0/16 -221.199.0.0/19 -221.199.32.0/20 -221.199.48.0/20 -221.199.64.0/18 +221.199.0.0/17 221.199.128.0/18 221.199.192.0/20 221.199.224.0/19 -221.200.0.0/14 -221.204.0.0/15 -221.206.0.0/16 -221.207.0.0/18 -221.207.64.0/18 -221.207.128.0/17 -221.208.0.0/14 -221.212.0.0/16 -221.213.0.0/16 -221.214.0.0/15 -221.216.0.0/13 -221.224.0.0/13 -221.232.0.0/14 -221.236.0.0/15 -221.238.0.0/16 -221.239.0.0/17 -221.239.128.0/17 -222.16.0.0/15 -222.18.0.0/15 -222.20.0.0/15 -222.22.0.0/16 -222.23.0.0/16 -222.24.0.0/15 -222.26.0.0/15 -222.28.0.0/14 +221.200.0.0/13 +221.208.0.0/12 +221.224.0.0/12 +222.16.0.0/12 222.32.0.0/11 -222.64.0.0/13 -222.72.0.0/15 -222.74.0.0/16 -222.75.0.0/16 -222.76.0.0/14 -222.80.0.0/15 -222.82.0.0/16 -222.83.0.0/17 -222.83.128.0/17 -222.84.0.0/16 -222.85.0.0/17 -222.85.128.0/17 -222.86.0.0/15 -222.88.0.0/15 -222.90.0.0/15 -222.92.0.0/14 +222.64.0.0/11 222.125.0.0/16 222.126.128.0/17 -222.128.0.0/14 -222.132.0.0/14 -222.136.0.0/13 -222.160.0.0/15 -222.162.0.0/16 -222.163.0.0/19 -222.163.32.0/19 -222.163.64.0/18 -222.163.128.0/17 -222.168.0.0/15 -222.170.0.0/15 -222.172.0.0/17 -222.172.128.0/17 -222.173.0.0/16 -222.174.0.0/15 -222.176.0.0/13 -222.184.0.0/13 -222.192.0.0/14 -222.196.0.0/15 -222.198.0.0/16 -222.199.0.0/16 -222.200.0.0/14 -222.204.0.0/15 -222.206.0.0/15 -222.208.0.0/13 -222.216.0.0/15 -222.218.0.0/16 -222.219.0.0/16 -222.220.0.0/15 -222.222.0.0/15 +222.128.0.0/12 +222.160.0.0/14 +222.168.0.0/13 +222.176.0.0/12 +222.192.0.0/11 222.240.0.0/13 -222.248.0.0/16 -222.249.0.0/17 -222.249.128.0/19 -222.249.160.0/20 -222.249.176.0/20 -222.249.192.0/18 -223.0.0.0/15 -223.2.0.0/15 -223.4.0.0/14 -223.8.0.0/13 +222.248.0.0/15 +223.0.0.0/12 223.20.0.0/15 223.27.184.0/22 223.64.0.0/11 @@ -5867,9 +3810,7 @@ 223.198.0.0/15 223.201.0.0/16 223.202.0.0/15 -223.208.0.0/14 -223.212.0.0/15 -223.214.0.0/15 +223.208.0.0/13 223.220.0.0/15 223.223.176.0/20 223.223.192.0/20 @@ -5879,4 +3820,5 @@ 223.254.0.0/16 223.255.0.0/17 223.255.236.0/22 -223.255.252.0/23 \ No newline at end of file +223.255.252.0/23 +224.0.0.0/3: \ No newline at end of file diff --git a/jni/Android.mk b/jni/Android.mk index fe94fd4..46821bd 100644 --- a/jni/Android.mk +++ b/jni/Android.mk @@ -1,6 +1,21 @@ LOCAL_PATH := $(call my-dir) ROOT_PATH := $(LOCAL_PATH) +######################################################## +## libancillary +######################################################## + +include $(CLEAR_VARS) + +ANCILLARY_SOURCE := fd_recv.c fd_send.c + +LOCAL_MODULE := libancillary +LOCAL_CFLAGS += -O2 -I$(LOCAL_PATH)/libancillary + +LOCAL_SRC_FILES := $(addprefix libancillary/, $(ANCILLARY_SOURCE)) + +include $(BUILD_STATIC_LIBRARY) + ######################################################## ## tun2socks ######################################################## @@ -14,7 +29,10 @@ LOCAL_CFLAGS += -DBADVPN_LITTLE_ENDIAN -DBADVPN_THREAD_SAFE LOCAL_CFLAGS += -DNDEBUG -DANDROID # LOCAL_CFLAGS += -DTUN2SOCKS_JNI +LOCAL_STATIC_LIBRARIES := libancillary + LOCAL_C_INCLUDES:= \ + $(LOCAL_PATH)/libancillary \ $(LOCAL_PATH)/badvpn/lwip/src/include/ipv4 \ $(LOCAL_PATH)/badvpn/lwip/src/include/ipv6 \ $(LOCAL_PATH)/badvpn/lwip/src/include \ @@ -112,11 +130,13 @@ include $(CLEAR_VARS) LOCAL_MODULE:= system +LOCAL_C_INCLUDES:= $(LOCAL_PATH)/libancillary + LOCAL_SRC_FILES:= system.cpp LOCAL_LDLIBS := -ldl -llog -LOCAL_STATIC_LIBRARIES := cpufeatures +LOCAL_STATIC_LIBRARIES := cpufeatures libancillary include $(BUILD_SHARED_LIBRARY) diff --git a/jni/badvpn/tun2socks/tun2socks.c b/jni/badvpn/tun2socks/tun2socks.c index 1818630..3c6eb6a 100644 --- a/jni/badvpn/tun2socks/tun2socks.c +++ b/jni/badvpn/tun2socks/tun2socks.c @@ -71,9 +71,13 @@ #include #ifdef ANDROID + +#include + #include #include #include + BAVL connections_tree; typedef struct { BAddr local_addr; @@ -404,11 +408,10 @@ int main (int argc, char **argv) if (options.fake_proc) { // Fake process name to cheat on Lollipop - strcpy(argv[0], "com.github.shadowsocks"); - prctl(PR_SET_NAME, "com.github.shadowsocks"); + strcpy(argv[0], "io.github.xsocks"); + prctl(PR_SET_NAME, "io.github.xsocks"); } - // handle --help and --version if (options.help) { print_version(); @@ -490,11 +493,55 @@ int main (int argc, char **argv) #ifdef ANDROID // use supplied file descriptor + int sock, fd; + struct sockaddr_un addr; + + if ((sock = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) { + BLog(BLOG_ERROR, "socket() failed: %s (socket sock = %d)\n", strerror(errno), sock); + goto fail2; + } + + char *path = "/data/data/io.github.xsocks/sock_path"; + unlink(path); + memset(&addr, 0, sizeof(addr)); + addr.sun_family = AF_UNIX; + strncpy(addr.sun_path, path, sizeof(addr.sun_path)-1); + + if (bind(sock, (struct sockaddr*)&addr, sizeof(addr)) == -1) { + BLog(BLOG_ERROR, "bind() failed: %s (sock = %d)\n", strerror(errno), sock); + close(sock); + goto fail2; + } + + if (listen(sock, 5) == -1) { + BLog(BLOG_ERROR, "listen() failed: %s (sock = %d)\n", strerror(errno), sock); + close(sock); + goto fail2; + } + + for (;;) { + int sock2; + struct sockaddr_un remote; + int t = sizeof(remote); + if ((sock2 = accept(sock, (struct sockaddr *)&remote, &t)) == -1) { + BLog(BLOG_ERROR, "accept() failed: %s (sock = %d)\n", strerror(errno), sock); + continue; + } + if (ancil_recv_fd(sock2, &fd)) { + BLog(BLOG_ERROR, "ancil_recv_fd: %s (sock = %d)\n", strerror(errno), sock2); + close(sock2); + } else { + close(sock2); + BLog(BLOG_INFO, "received fd = %d", fd); + break; + } + } + close(sock); struct BTap_init_data init_data; init_data.dev_type = BTAP_DEV_TUN; init_data.init_type = BTAP_INIT_FD; - init_data.init.fd.fd = options.tun_fd; + init_data.init.fd.fd = fd; init_data.init.fd.mtu = options.tun_mtu; if (!BTap_Init2(&device, &ss, init_data, device_error_handler, NULL)) { @@ -1724,6 +1771,9 @@ err_t listener_accept_func (void *arg, struct tcp_pcb *newpcb, err_t err) // set client not closed client->client_closed = 0; + // enable TCP_NODELAY + tcp_nagle_disable(client->pcb); + // setup handler argument tcp_arg(client->pcb, client); diff --git a/jni/libancillary/API b/jni/libancillary/API new file mode 100644 index 0000000..b558995 --- /dev/null +++ b/jni/libancillary/API @@ -0,0 +1,139 @@ + This library provide an easy interface to the black magic that can be done + on Unix domain sockets, like passing file descriptors from one process to + another. + + Programs that uses this library should include the ancillary.h header file. + Nothing else is required. + + All functions of this library require the following header: + + #include + + At this time, the only ancillary data defined by the Single Unix + Specification (v3) is file descriptors. + +Passing file descriptors + + int ancil_send_fd(socket, file_descriptor) + int socket: the Unix socket + int file_descriptor: the file descriptor + Return value: 0 for success, -1 for failure. + + Sends one file descriptor on a socket. + In case of failure, errno is set; the possible values are the ones of the + sendmsg(2) system call. + + + int ancil_recv_fd(socket, file_descriptor) + int socket: the Unix socket + int *file_descriptor: pointer to the returned file descriptor + Return value: 0 for success, -1 for failure + + Receives one file descriptor from a socket. + In case of success, the file descriptor is stored in the integer pointed + to by file_descriptor. + In case of failure, errno is set; the possible values are the ones of the + recvmsg(2) system call. + The behavior is undefined if the recv_fd does not match a send_fd* on the + other side. + + + int ancil_send_fds(socket, file_descriptors, num_file_descriptors) + int socket: the Unix socket + const int *file_descriptors: array of file descriptors + unsigned num_file_descriptors: number of file descriptors + Return value: 0 for success, -1 for failure + + Sends several file descriptors on a socket. + In case of failure, errno is set; the possible values are the ones of the + sendmsg(2) system call. + The maximum number of file descriptors that can be sent using this + function is ANCIL_MAX_N_FDS; the behavior is undefined in case of + overflow, probably a stack corruption. + + + int ancil_recv_fds(socket, file_descriptors, num_file_descriptors) + int socket: the Unix socket + int *file_descriptors: return array of file descriptors + unsigned num_file_descriptors: number of file descriptors + Return value: number of received fd for success, -1 for failure + + Receives several file descriptors from a socket, no more than + num_file_descriptors. + In case of success, the received file descriptors are stored in the array + pointed to by file_descriptors. + In case of failure, errno is set; the possible values are the ones of the + recvmsg(2) system call. + The maximum number of file descriptors that can be received using this + function is ANCIL_MAX_N_FDS; the behavior is undefined in case of + overflow, probably a stack corruption. + The behavior is undefined if the recv_fds does not match a send_fd* on + the other side, or if the number of received file descriptors is more than + num_file_descriptors. + + + int ancil_send_fds_with_buffer(socket, fds, num, buffer) + int socket: the Unix socket + const int *fds: array of file descriptors + unsigned num: number of file descriptors + void *buffer: buffer to hold the system data structures + Return value: 0 for success, -1 for failure + + Sends several file descriptors on a socket. + In case of failure, errno is set; the possible values are the ones of the + sendmsg(2) system call. + The buffer argument must point to a memory area large enough to hold the + system data structures, see ANCIL_FD_BUFFER. + + + int ancil_send_fds_with_buffer(socket, fds, num, buffer) + int socket: the Unix socket + int *fds: return array of file descriptors + unsigned num: number of file descriptors + void *buffer: buffer to hold the system data structures + Return value: number of received fd for success, -1 for failure + + Receives several file descriptors from a socket, no more than + num_file_descriptors. + In case of success, the received file descriptors are stored in the array + pointed to by file_descriptors. + In case of failure, errno is set; the possible values are the ones of the + recvmsg(2) system call. + The behavior is undefined if the recv_fds does not match a send_fd* on + the other side, or if the number of received file descriptors is more than + num_file_descriptors. + The buffer argument must point to a memory area large enough to hold the + system data structures, see ANCIL_FD_BUFFER. + + + ANCIL_MAX_N_FDS + + Maximum number of file descriptors that can be sent with the sent_fds and + recv_fds functions. If you have to send more at once, use the + *_with_buffer versions. The value is enough to send "quite a few" file + descriptors. + + + ANCIL_FD_BUFFER(n) + int n: number of file descriptors + + Expands to a structure data type large enough to hold the system data + structures for n file descriptors. So the address of a variable declared + of type ANCIL_FD_BUFFER(n) is suitable as the buffer argument for + *_with_buffer on n file descriptors. + To use this macro, you need and . Bevare: with + Solaris, the _XPG4_2 macro must be defined before sys/socket is included. + + +Tuning the compilation + + This library is designed to be included in projects, not installed in + /usr/lib. If your project does not use some of the functions, the + TUNE_OPTS variable in the Makefile allows not to build them. It is a list + of proprocessor options: + + -DNDEBUG: turn assertions off (see assert(3)) + -DSPARE_SEND_FDS: do not build ancil_send_fds + -DSPARE_SEND_FD: do not build ancil_send_fd + -DSPARE_RECV_FDS: do not build ancil_recv_fds + -DSPARE_RECV_FD: do not build ancil_recv_fd diff --git a/jni/libancillary/COPYING b/jni/libancillary/COPYING new file mode 100644 index 0000000..5bcd9c2 --- /dev/null +++ b/jni/libancillary/COPYING @@ -0,0 +1,21 @@ +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/jni/libancillary/Makefile b/jni/libancillary/Makefile new file mode 100644 index 0000000..3d32533 --- /dev/null +++ b/jni/libancillary/Makefile @@ -0,0 +1,73 @@ +########################################################################### +# libancillary - black magic on Unix domain sockets +# (C) Nicolas George +# Makefile - guess what +########################################################################### + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED +# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +CC=gcc +CFLAGS=-Wall -g -O2 +LDFLAGS= +LIBS= +AR=ar +RANLIB=ranlib +RM=rm +CP=cp +MKDIR=mkdir +TAR=tar +GZIP=gzip -9 + +NAME=libancillary +DISTRIBUTION=API COPYING Makefile ancillary.h fd_send.c fd_recv.c test.c +VERSION=0.9.1 + +OBJECTS=fd_send.o fd_recv.o + +TUNE_OPTS=-DNDEBUG +#TUNE_OPTS=-DNDEBUG \ + -DSPARE_SEND_FDS -DSPARE_SEND_FD -DSPARE_RECV_FDS -DSPARE_RECV_FD + +.c.o: + $(CC) -c $(CFLAGS) $(TUNE_OPTS) $< + +all: libancillary.a + +libancillary.a: $(OBJECTS) + $(AR) cr $@ $(OBJECTS) + $(RANLIB) $@ + +fd_send.o: ancillary.h +fd_recv.o: ancillary.h + +test: test.c libancillary.a + $(CC) -o $@ $(CFLAGS) $(LDFLAGS) -L. test.c -lancillary $(LIBS) + +clean: + -$(RM) -f *.o *.a test + +dist: + $(MKDIR) $(NAME)-$(VERSION) + $(CP) $(DISTRIBUTION) $(NAME)-$(VERSION) + $(TAR) -cf - $(NAME)-$(VERSION) | $(GZIP) > $(NAME)-$(VERSION).tar.gz + $(RM) -rf $(NAME)-$(VERSION) diff --git a/jni/libancillary/ancillary.h b/jni/libancillary/ancillary.h new file mode 100644 index 0000000..636d867 --- /dev/null +++ b/jni/libancillary/ancillary.h @@ -0,0 +1,131 @@ +/*************************************************************************** + * libancillary - black magic on Unix domain sockets + * (C) Nicolas George + * ancillary.c - public header + ***************************************************************************/ + +/* + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef ANCILLARY_H__ +#define ANCILLARY_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +/*************************************************************************** + * Start of the readable part. + ***************************************************************************/ + +#define ANCIL_MAX_N_FDS 960 +/* + * Maximum number of fds that can be sent or received using the "esay" + * functions; this is so that all can fit in one page. + */ + +extern int +ancil_send_fds_with_buffer(int, const int *, unsigned, void *); +/* + * ancil_send_fds_with_buffer(sock, n_fds, fds, buffer) + * + * Sends the file descriptors in the array pointed by fds, of length n_fds + * on the socket sock. + * buffer is a writeable memory area large enough to hold the required data + * structures. + * Returns: -1 and errno in case of error, 0 in case of success. + */ + +extern int +ancil_recv_fds_with_buffer(int, int *, unsigned, void *); +/* + * ancil_recv_fds_with_buffer(sock, n_fds, fds, buffer) + * + * Receives *n_fds file descriptors into the array pointed by fds + * from the socket sock. + * buffer is a writeable memory area large enough to hold the required data + * structures. + * Returns: -1 and errno in case of error, the actual number of received fd + * in case of success + */ + +#define ANCIL_FD_BUFFER(n) \ + struct { \ + struct cmsghdr h; \ + int fd[n]; \ + } +/* ANCIL_FD_BUFFER(n) + * + * A structure type suitable to be used as buffer for n file descriptors. + * Requires . + * Example: + * ANCIL_FD_BUFFER(42) buffer; + * ancil_recv_fds_with_buffer(sock, 42, my_fds, &buffer); + */ + +extern int +ancil_send_fds(int, const int *, unsigned); +/* + * ancil_send_fds(sock, n_fds, fds) + * + * Sends the file descriptors in the array pointed by fds, of length n_fds + * on the socket sock. + * n_fds must not be greater than ANCIL_MAX_N_FDS. + * Returns: -1 and errno in case of error, 0 in case of success. + */ + +extern int +ancil_recv_fds(int, int *, unsigned); +/* + * ancil_recv_fds(sock, n_fds, fds) + * + * Receives *n_fds file descriptors into the array pointed by fds + * from the socket sock. + * *n_fds must not be greater than ANCIL_MAX_N_FDS. + * Returns: -1 and errno in case of error, the actual number of received fd + * in case of success. + */ + + +extern int +ancil_send_fd(int, int); +/* ancil_recv_fd(sock, fd); + * + * Sends the file descriptor fd on the socket sock. + * Returns : -1 and errno in case of error, 0 in case of success. + */ + +extern int +ancil_recv_fd(int, int *); +/* ancil_send_fd(sock, &fd); + * + * Receives the file descriptor fd from the socket sock. + * Returns : -1 and errno in case of error, 0 in case of success. + */ + +#ifdef __cplusplus +} +#endif + +#endif /* ANCILLARY_H__ */ diff --git a/jni/libancillary/fd_recv.c b/jni/libancillary/fd_recv.c new file mode 100644 index 0000000..46c2e69 --- /dev/null +++ b/jni/libancillary/fd_recv.c @@ -0,0 +1,98 @@ +/*************************************************************************** + * libancillary - black magic on Unix domain sockets + * (C) Nicolas George + * fd_send.c - receiving file descriptors + ***************************************************************************/ + +/* + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _XPG4_2 /* Solaris sucks */ +# define _XPG4_2 +#endif + +#include +#include +#include +#include +#include +#if defined(__FreeBSD__) +# include /* FreeBSD sucks */ +#endif + +#include "ancillary.h" + +int +ancil_recv_fds_with_buffer(int sock, int *fds, unsigned n_fds, void *buffer) +{ + struct msghdr msghdr; + char nothing; + struct iovec nothing_ptr; + struct cmsghdr *cmsg; + int i; + + nothing_ptr.iov_base = ¬hing; + nothing_ptr.iov_len = 1; + msghdr.msg_name = NULL; + msghdr.msg_namelen = 0; + msghdr.msg_iov = ¬hing_ptr; + msghdr.msg_iovlen = 1; + msghdr.msg_flags = 0; + msghdr.msg_control = buffer; + msghdr.msg_controllen = sizeof(struct cmsghdr) + sizeof(int) * n_fds; + cmsg = CMSG_FIRSTHDR(&msghdr); + cmsg->cmsg_len = msghdr.msg_controllen; + cmsg->cmsg_level = SOL_SOCKET; + cmsg->cmsg_type = SCM_RIGHTS; + for(i = 0; i < n_fds; i++) + ((int *)CMSG_DATA(cmsg))[i] = -1; + + if(recvmsg(sock, &msghdr, 0) < 0) + return(-1); + for(i = 0; i < n_fds; i++) + fds[i] = ((int *)CMSG_DATA(cmsg))[i]; + n_fds = (msghdr.msg_controllen - sizeof(struct cmsghdr)) / sizeof(int); + return(n_fds); +} + +#ifndef SPARE_RECV_FDS +int +ancil_recv_fds(int sock, int *fd, unsigned n_fds) +{ + ANCIL_FD_BUFFER(ANCIL_MAX_N_FDS) buffer; + + assert(n_fds <= ANCIL_MAX_N_FDS); + return(ancil_recv_fds_with_buffer(sock, fd, n_fds, &buffer)); +} +#endif /* SPARE_RECV_FDS */ + +#ifndef SPARE_RECV_FD +int +ancil_recv_fd(int sock, int *fd) +{ + ANCIL_FD_BUFFER(1) buffer; + + return(ancil_recv_fds_with_buffer(sock, fd, 1, &buffer) == 1 ? 0 : -1); +} +#endif /* SPARE_RECV_FD */ diff --git a/jni/libancillary/fd_send.c b/jni/libancillary/fd_send.c new file mode 100644 index 0000000..01de87f --- /dev/null +++ b/jni/libancillary/fd_send.c @@ -0,0 +1,92 @@ +/*************************************************************************** + * libancillary - black magic on Unix domain sockets + * (C) Nicolas George + * fd_send.c - sending file descriptors + ***************************************************************************/ + +/* + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _XPG4_2 /* Solaris sucks */ +# define _XPG4_2 +#endif + +#include +#include +#include +#include +#include +#if defined(__FreeBSD__) +# include /* FreeBSD sucks */ +#endif + +#include "ancillary.h" + +int +ancil_send_fds_with_buffer(int sock, const int *fds, unsigned n_fds, void *buffer) +{ + struct msghdr msghdr; + char nothing = '!'; + struct iovec nothing_ptr; + struct cmsghdr *cmsg; + int i; + + nothing_ptr.iov_base = ¬hing; + nothing_ptr.iov_len = 1; + msghdr.msg_name = NULL; + msghdr.msg_namelen = 0; + msghdr.msg_iov = ¬hing_ptr; + msghdr.msg_iovlen = 1; + msghdr.msg_flags = 0; + msghdr.msg_control = buffer; + msghdr.msg_controllen = sizeof(struct cmsghdr) + sizeof(int) * n_fds; + cmsg = CMSG_FIRSTHDR(&msghdr); + cmsg->cmsg_len = msghdr.msg_controllen; + cmsg->cmsg_level = SOL_SOCKET; + cmsg->cmsg_type = SCM_RIGHTS; + for(i = 0; i < n_fds; i++) + ((int *)CMSG_DATA(cmsg))[i] = fds[i]; + return(sendmsg(sock, &msghdr, 0) >= 0 ? 0 : -1); +} + +#ifndef SPARE_SEND_FDS +int +ancil_send_fds(int sock, const int *fds, unsigned n_fds) +{ + ANCIL_FD_BUFFER(ANCIL_MAX_N_FDS) buffer; + + assert(n_fds <= ANCIL_MAX_N_FDS); + return(ancil_send_fds_with_buffer(sock, fds, n_fds, &buffer)); +} +#endif /* SPARE_SEND_FDS */ + +#ifndef SPARE_SEND_FD +int +ancil_send_fd(int sock, int fd) +{ + ANCIL_FD_BUFFER(1) buffer; + + return(ancil_send_fds_with_buffer(sock, &fd, 1, &buffer)); +} +#endif /* SPARE_SEND_FD */ diff --git a/jni/libancillary/test.c b/jni/libancillary/test.c new file mode 100644 index 0000000..d3c1fda --- /dev/null +++ b/jni/libancillary/test.c @@ -0,0 +1,112 @@ +/*************************************************************************** + * libancillary - black magic on Unix domain sockets + * (C) Nicolas George + * test.c - testing and example program + ***************************************************************************/ + +/* + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include +#include +#include +#include +#include "ancillary.h" + +void child_process(int sock) +{ + int fd; + int fds[3], nfds; + char b[] = "This is on the received fd!\n"; + + if(ancil_recv_fd(sock, &fd)) { + perror("ancil_recv_fd"); + exit(1); + } else { + printf("Received fd: %d\n", fd); + } + write(fd, b, sizeof(b)); + close(fd); + sleep(2); + + nfds = ancil_recv_fds(sock, fds, 3); + if(nfds < 0) { + perror("ancil_recv_fds"); + exit(1); + } else { + printf("Received %d/3 fds : %d %d %d.\n", nfds, + fds[0], fds[1], fds[2]); + } +} + +void parent_process(int sock) +{ + int fds[2] = { 1, 2 }; + + if(ancil_send_fd(sock, 1)) { + perror("ancil_send_fd"); + exit(1); + } else { + printf("Sent fd.\n"); + } + sleep(1); + + if(ancil_send_fds(sock, fds, 2)) { + perror("ancil_send_fds"); + exit(1); + } else { + printf("Sent two fds.\n"); + } +} + +int main(void) +{ + int sock[2]; + + if(socketpair(PF_UNIX, SOCK_STREAM, 0, sock)) { + perror("socketpair"); + exit(1); + } else { + printf("Established socket pair: (%d, %d)\n", sock[0], sock[1]); + } + + switch(fork()) { + case 0: + close(sock[0]); + child_process(sock[1]); + break; + case -1: + perror("fork"); + exit(1); + default: + close(sock[1]); + parent_process(sock[0]); + wait(NULL); + break; + } + return(0); +} diff --git a/jni/system.cpp b/jni/system.cpp index 67c20d5..77f54ad 100644 --- a/jni/system.cpp +++ b/jni/system.cpp @@ -5,8 +5,15 @@ #include #include #include +#include #include +#include +#include +#include +#include +#include + #define LOGI(...) do { __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__); } while(0) #define LOGW(...) do { __android_log_print(ANDROID_LOG_WARN, LOG_TAG, __VA_ARGS__); } while(0) #define LOGE(...) do { __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__); } while(0) @@ -21,11 +28,7 @@ jstring Java_io_github_xsocks_system_getabi(JNIEnv *env, jobject thiz) { } else if (family == ANDROID_CPU_FAMILY_MIPS) { abi = "mips"; } else if (family == ANDROID_CPU_FAMILY_ARM) { - // if (features & ANDROID_CPU_ARM_FEATURE_ARMv7) { abi = "armeabi-v7a"; - // } else { - // abi = "armeabi"; - // } } return env->NewStringUTF(abi); } @@ -36,9 +39,46 @@ void Java_io_github_xsocks_system_exec(JNIEnv *env, jobject thiz, jstring cmd) { env->ReleaseStringUTFChars(cmd, str); } +void Java_io_github_xsocks_system_jniclose(JNIEnv *env, jobject thiz, jint fd) { + close(fd); +} + +jint Java_io_github_xsocks_system_sendfd(JNIEnv *env, jobject thiz, jint tun_fd) { + int fd; + struct sockaddr_un addr; + + if ( (fd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) { + LOGE("socket() failed: %s (socket fd = %d)\n", strerror(errno), fd); + return (jint)-1; + } + + memset(&addr, 0, sizeof(addr)); + addr.sun_family = AF_UNIX; + strncpy(addr.sun_path, "/data/data/io.github.xsocks/sock_path", sizeof(addr.sun_path)-1); + + if (connect(fd, (struct sockaddr*)&addr, sizeof(addr)) == -1) { + LOGE("connect() failed: %s (fd = %d)\n", strerror(errno), fd); + close(fd); + return (jint)-1; + } + + if (ancil_send_fd(fd, tun_fd)) { + LOGE("ancil_send_fd: %s", strerror(errno)); + close(fd); + return (jint)-1; + } + + close(fd); + return 0; +} + static const char *classPathName = "io/github/xsocks/System"; static JNINativeMethod method_table[] = { + { "jniclose", "(I)V", + (void*) Java_io_github_xsocks_system_jniclose }, + { "sendfd", "(I)I", + (void*) Java_io_github_xsocks_system_sendfd }, { "exec", "(Ljava/lang/String;)V", (void*) Java_io_github_xsocks_system_exec }, { "getABI", "()Ljava/lang/String;", diff --git a/jni/xsocks b/jni/xsocks index 85f84df..33f7d1f 160000 --- a/jni/xsocks +++ b/jni/xsocks @@ -1 +1 @@ -Subproject commit 85f84df30fdcd1516ebc13244eb620abb97f8736 +Subproject commit 33f7d1fb9f769228a65397356edd8fa5803ca273