⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 natchecker.java

📁 java 文件下载器。可自定义
💻 JAVA
字号:
// Decompiled by Jad v1.5.8e2. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://kpdus.tripod.com/jad.html
// Decompiler options: packimports(3) fieldsfirst ansi space 
// Source File Name:   NatChecker.java

package org.gudy.azureus2.core3.ipchecker.natchecker;

import com.aelitis.azureus.core.AzureusCore;
import com.aelitis.azureus.core.networkmanager.admin.NetworkAdmin;
import com.aelitis.azureus.core.networkmanager.admin.NetworkAdminASN;
import com.aelitis.azureus.plugins.upnp.*;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.*;
import java.nio.ByteBuffer;
import java.util.Locale;
import java.util.Map;
import org.gudy.azureus2.core3.internat.MessageText;
import org.gudy.azureus2.core3.logging.*;
import org.gudy.azureus2.core3.tracker.util.TRTrackerUtils;
import org.gudy.azureus2.core3.util.BDecoder;
import org.gudy.azureus2.core3.util.Debug;
import org.gudy.azureus2.plugins.PluginInterface;
import org.gudy.azureus2.plugins.PluginManager;

// Referenced classes of package org.gudy.azureus2.core3.ipchecker.natchecker:
//			NatCheckerServer

public class NatChecker
{

	private static final LogIDs LOGID;
	public static final int NAT_OK = 1;
	public static final int NAT_KO = 2;
	public static final int NAT_UNABLE = 3;
	private int result;
	private String additional_info;
	private InetAddress ip_address;

	public NatChecker(AzureusCore azureus_core, InetAddress bind_ip, int port, boolean http_test)
	{
		String check;
		NatCheckerServer server;
		UPnPMapping new_mapping;
		String upnp_str;
		additional_info = "";
		check = (new StringBuilder()).append("azureus_rand_").append(String.valueOf((int)(Math.random() * 100000D))).toString();
		if (port < 0 || port > 65535 || port == 6880)
		{
			result = 3;
			additional_info = "Invalid port";
			return;
		}
		try
		{
			server = new NatCheckerServer(bind_ip, port, check, http_test);
		}
		catch (Throwable e)
		{
			result = 3;
			additional_info = (new StringBuilder()).append("Can't initialise server: ").append(Debug.getNestedExceptionMessage(e)).toString();
			return;
		}
		PluginInterface pi_upnp = azureus_core.getPluginManager().getPluginInterfaceByClass(com/aelitis/azureus/plugins/upnp/UPnPPlugin);
		new_mapping = null;
		upnp_str = null;
		if (pi_upnp != null)
		{
			UPnPPlugin upnp = (UPnPPlugin)pi_upnp.getPlugin();
			UPnPMapping mapping = upnp.getMapping(true, port);
			if (mapping == null)
			{
				new_mapping = mapping = upnp.addMapping("NAT Tester", true, port, true);
				try
				{
					Thread.sleep(500L);
				}
				catch (Throwable e)
				{
					Debug.printStackTrace(e);
				}
			}
			UPnPPluginService services[] = upnp.getServices();
			if (services.length > 0)
			{
				upnp_str = "";
				for (int i = 0; i < services.length; i++)
				{
					UPnPPluginService service = services[i];
					upnp_str = (new StringBuilder()).append(upnp_str).append(i != 0 ? "," : "").append(service.getInfo()).toString();
				}

			}
		}
		server.start();
		String urlStr = (new StringBuilder()).append("http://nettest.azureusplatform.com/").append(http_test ? "httptest" : "nattest").append("?port=").append(String.valueOf(port)).append("&check=").append(check).toString();
		if (upnp_str != null)
			urlStr = (new StringBuilder()).append(urlStr).append("&upnp=").append(URLEncoder.encode(upnp_str, "UTF8")).toString();
		NetworkAdminASN net_asn = NetworkAdmin.getSingleton().getCurrentASN();
		String as = net_asn.getAS();
		String asn = net_asn.getASName();
		if (as.length() > 0)
		{
			urlStr = (new StringBuilder()).append(urlStr).append("&as=").append(URLEncoder.encode(as, "UTF8")).toString();
			urlStr = (new StringBuilder()).append(urlStr).append("&asn=").append(URLEncoder.encode(asn, "UTF8")).toString();
		}
		urlStr = (new StringBuilder()).append(urlStr).append("&locale=").append(MessageText.getCurrentLocale().toString()).toString();
		String ip_override = TRTrackerUtils.getPublicIPOverride();
		if (ip_override != null)
			urlStr = (new StringBuilder()).append(urlStr).append("&ip=").append(ip_override).toString();
		URL url = new URL(urlStr);
		HttpURLConnection con = (HttpURLConnection)url.openConnection();
		con.connect();
		ByteArrayOutputStream message = new ByteArrayOutputStream();
		InputStream is = con.getInputStream();
		byte data[] = new byte[1024];
		int expected_length = -1;
		do
		{
			int len = is.read(data);
			if (len <= 0)
				break;
			message.write(data, 0, len);
			if (expected_length == -1 && message.size() >= 4)
			{
				byte bytes[] = message.toByteArray();
				ByteBuffer bb = ByteBuffer.wrap(bytes);
				expected_length = bb.getInt();
				message = new ByteArrayOutputStream();
				if (bytes.length > 4)
					message.write(bytes, 4, bytes.length - 4);
			}
		} while (expected_length == -1 || message.size() != expected_length);
		Map map = BDecoder.decode(message.toByteArray());
		int reply_result = ((Long)map.get("result")).intValue();
		switch (reply_result)
		{
		case 0: // '\0'
			byte reason[] = (byte[])(byte[])map.get("reason");
			if (reason != null)
				Logger.log(new LogEvent(LOGID, 3, (new StringBuilder()).append("NAT CHECK FAILED: ").append(new String(reason)).toString()));
			result = 2;
			additional_info = reason != null ? new String(reason, "UTF8") : "Unknown";
			break;

		case 1: // '\001'
			result = 1;
			byte reply[] = (byte[])(byte[])map.get("reply");
			if (reply != null)
				additional_info = new String(reply, "UTF8");
			break;

		default:
			result = 3;
			additional_info = "Invalid response";
			break;
		}
		byte ip_bytes[] = (byte[])(byte[])map.get("ip_address");
		if (ip_bytes != null)
			try
			{
				ip_address = InetAddress.getByAddress(ip_bytes);
			}
			catch (Throwable e) { }
		server.stopIt();
		if (new_mapping != null)
			new_mapping.destroy();
		break MISSING_BLOCK_LABEL_1046;
		Exception e;
		e;
		result = 3;
		additional_info = (new StringBuilder()).append("Error: ").append(Debug.getNestedExceptionMessage(e)).toString();
		server.stopIt();
		if (new_mapping != null)
			new_mapping.destroy();
		break MISSING_BLOCK_LABEL_1046;
		Exception exception;
		exception;
		server.stopIt();
		if (new_mapping != null)
			new_mapping.destroy();
		throw exception;
	}

	public int getResult()
	{
		return result;
	}

	public InetAddress getExternalAddress()
	{
		return ip_address;
	}

	public String getAdditionalInfo()
	{
		return additional_info;
	}

	static 
	{
		LOGID = LogIDs.NET;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -