亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? discoverytest.java

?? 檢測nat類型的jstun的程序,雙擊即可.然后可在log.txt讀取信息.
?? JAVA
字號:
/* * This file is part of JSTUN.  *  * Copyright (c) 2005 Thomas King <king@t-king.de> - All rights * reserved. *  * This software is licensed under either the GNU Public License (GPL), * or the Apache 2.0 license. Copies of both license agreements are * included in this distribution. */package de.javawi.jstun.test;import java.io.IOException;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;import java.net.InetSocketAddress;import java.net.SocketException;import java.net.SocketTimeoutException;import java.net.UnknownHostException;import java.util.logging.Logger;import de.javawi.jstun.attribute.ChangeRequest;import de.javawi.jstun.attribute.ChangedAddress;import de.javawi.jstun.attribute.ErrorCode;import de.javawi.jstun.attribute.MappedAddress;import de.javawi.jstun.attribute.MessageAttribute;import de.javawi.jstun.attribute.MessageAttributeException;import de.javawi.jstun.attribute.MessageAttributeParsingException;import de.javawi.jstun.header.MessageHeader;import de.javawi.jstun.header.MessageHeaderParsingException;import de.javawi.jstun.util.UtilityException;public class DiscoveryTest {	private static Logger logger = Logger.getLogger("de.javawi.stun.test.DiscoveryTest");	InetAddress iaddress;	String stunServer;	int port;	int timeoutInitValue = 300; //ms	MappedAddress ma = null;	ChangedAddress ca = null;	boolean nodeNatted = true;	DatagramSocket socketTest1 = null;	DiscoveryInfo di = null;		public DiscoveryTest(InetAddress iaddress , String stunServer, int port) {		super();		this.iaddress = iaddress;		this.stunServer = stunServer;		this.port = port;	}			public DiscoveryInfo test() throws UtilityException, SocketException, UnknownHostException, IOException, MessageAttributeParsingException, MessageAttributeException, MessageHeaderParsingException{		ma = null;		ca = null;		nodeNatted = true;		socketTest1 = null;		di = new DiscoveryInfo(iaddress);				if (test1()) {			if (test2()) {				if (test1Redo()) {					test3();				}			}		}				socketTest1.close();				return di;	}		private boolean test1() throws UtilityException, SocketException, UnknownHostException, IOException, MessageAttributeParsingException, MessageHeaderParsingException {		int timeSinceFirstTransmission = 0;		int timeout = timeoutInitValue;		while (true) {			try {				// Test 1 including response				socketTest1 = new DatagramSocket(new InetSocketAddress(iaddress, 0));				socketTest1.setReuseAddress(true);				socketTest1.connect(InetAddress.getByName(stunServer), port);				socketTest1.setSoTimeout(timeout);								MessageHeader sendMH = new MessageHeader(MessageHeader.MessageHeaderType.BindingRequest);				sendMH.generateTransactionID();								ChangeRequest changeRequest = new ChangeRequest();				sendMH.addMessageAttribute(changeRequest);								byte[] data = sendMH.getBytes();				DatagramPacket send = new DatagramPacket(data, data.length);				socketTest1.send(send);				logger.finer("Test 1: Binding Request sent.");							MessageHeader receiveMH = new MessageHeader();				while (!(receiveMH.equalTransactionID(sendMH))) {					DatagramPacket receive = new DatagramPacket(new byte[200], 200);					socketTest1.receive(receive);					receiveMH = MessageHeader.parseHeader(receive.getData());				}								ma = (MappedAddress) receiveMH.getMessageAttribute(MessageAttribute.MessageAttributeType.MappedAddress);				ca = (ChangedAddress) receiveMH.getMessageAttribute(MessageAttribute.MessageAttributeType.ChangedAddress);				ErrorCode ec = (ErrorCode) receiveMH.getMessageAttribute(MessageAttribute.MessageAttributeType.ErrorCode);				if (ec != null) {					di.setError(ec.getResponseCode(), ec.getReason());					logger.config("Message header contains errorcode message attribute.");					return false;				}				if ((ma == null) || (ca == null)) {					di.setError(700, "The server is sending incomplete response (Mapped Address and Changed Address message attributes are missing). The client should not retry.");					logger.config("Response does not contain a mapped address or changed address message attribute.");					return false;				} else {					di.setPublicIP(ma.getAddress().getInetAddress());					if ((ma.getPort() == socketTest1.getLocalPort()) && (ma.getAddress().getInetAddress().equals(socketTest1.getLocalAddress()))) {						logger.fine("Node is not natted.");						nodeNatted = false;					} else {						logger.fine("Node is natted.");					}					return true;				}			} catch (SocketTimeoutException ste) {				if (timeSinceFirstTransmission < 7900) {					logger.finer("Test 1: Socket timeout while receiving the response.");					timeSinceFirstTransmission += timeout;					int timeoutAddValue = (timeSinceFirstTransmission * 2);					if (timeoutAddValue > 1600) timeoutAddValue = 1600;					timeout = timeoutAddValue;				} else {					// node is not capable of udp communication					logger.finer("Test 1: Socket timeout while receiving the response. Maximum retry limit exceed. Give up.");					di.setBlockedUDP();					logger.fine("Node is not capable of udp communication.");					return false;				}			} 		}	}			private boolean test2() throws UtilityException, SocketException, UnknownHostException, IOException, MessageAttributeParsingException, MessageAttributeException, MessageHeaderParsingException {		int timeSinceFirstTransmission = 0;		int timeout = timeoutInitValue;		while (true) {			try {				// Test 2 including response				DatagramSocket sendSocket = new DatagramSocket(new InetSocketAddress(iaddress, 0));				sendSocket.connect(InetAddress.getByName(stunServer), port);				sendSocket.setSoTimeout(timeout);								MessageHeader sendMH = new MessageHeader(MessageHeader.MessageHeaderType.BindingRequest);				sendMH.generateTransactionID();								ChangeRequest changeRequest = new ChangeRequest();				changeRequest.setChangeIP();				changeRequest.setChangePort();				sendMH.addMessageAttribute(changeRequest);					 				byte[] data = sendMH.getBytes(); 				DatagramPacket send = new DatagramPacket(data, data.length);				sendSocket.send(send);				logger.finer("Test 2: Binding Request sent.");								int localPort = sendSocket.getLocalPort();				InetAddress localAddress = sendSocket.getLocalAddress();								sendSocket.close();								DatagramSocket receiveSocket = new DatagramSocket(localPort, localAddress);				receiveSocket.connect(ca.getAddress().getInetAddress(), ca.getPort());				receiveSocket.setSoTimeout(timeout);								MessageHeader receiveMH = new MessageHeader();				while(!(receiveMH.equalTransactionID(sendMH))) {					DatagramPacket receive = new DatagramPacket(new byte[200], 200);					receiveSocket.receive(receive);					receiveMH = MessageHeader.parseHeader(receive.getData());				}				ErrorCode ec = (ErrorCode) receiveMH.getMessageAttribute(MessageAttribute.MessageAttributeType.ErrorCode);				if (ec != null) {					di.setError(ec.getResponseCode(), ec.getReason());					logger.config("Message header contains errorcode message attribute.");					return false;				}				if (!nodeNatted) {					di.setOpenAccess();					logger.fine("Node has open access to the internet (or, at least the node is a full-cone NAT without translation).");				} else {					di.setFullCone();					logger.fine("Node is behind a full-cone NAT.");				}				return false;			} catch (SocketTimeoutException ste) {				if (timeSinceFirstTransmission < 7900) {					logger.finer("Test 2: Socket timeout while receiving the response.");					timeSinceFirstTransmission += timeout;					int timeoutAddValue = (timeSinceFirstTransmission * 2);					if (timeoutAddValue > 1600) timeoutAddValue = 1600;					timeout = timeoutAddValue;				} else {					logger.finer("Test 2: Socket timeout while receiving the response. Maximum retry limit exceed. Give up.");					if (!nodeNatted) {						di.setSymmetricUDPFirewall();						logger.fine("Node is behind a symmetric udp firewall.");						return false;					} else {						// not is natted						// redo test 1 with address and port as offered in the changed-address message attribute						return true;					}				}			}		}	}		private boolean test1Redo() throws UtilityException, SocketException, UnknownHostException, IOException, MessageAttributeParsingException, MessageHeaderParsingException{		int timeSinceFirstTransmission = 0;		int timeout = timeoutInitValue;		while (true) {			// redo test 1 with address and port as offered in the changed-address message attribute			try {				// Test 1 with changed port and address values				socketTest1.connect(ca.getAddress().getInetAddress(), ca.getPort());				socketTest1.setSoTimeout(timeout);								MessageHeader sendMH = new MessageHeader(MessageHeader.MessageHeaderType.BindingRequest);				sendMH.generateTransactionID();								ChangeRequest changeRequest = new ChangeRequest();				sendMH.addMessageAttribute(changeRequest);								byte[] data = sendMH.getBytes();				DatagramPacket send = new DatagramPacket(data, data.length);				socketTest1.send(send);				logger.finer("Test 1 redo with changed address: Binding Request sent.");								MessageHeader receiveMH = new MessageHeader();				while (!(receiveMH.equalTransactionID(sendMH))) {					DatagramPacket receive = new DatagramPacket(new byte[200], 200);					socketTest1.receive(receive);					receiveMH = MessageHeader.parseHeader(receive.getData());				}				MappedAddress ma2 = (MappedAddress) receiveMH.getMessageAttribute(MessageAttribute.MessageAttributeType.MappedAddress);				ErrorCode ec = (ErrorCode) receiveMH.getMessageAttribute(MessageAttribute.MessageAttributeType.ErrorCode);				if (ec != null) {					di.setError(ec.getResponseCode(), ec.getReason());					logger.config("Message header contains errorcode message attribute.");					return false;				}				if (ma2 == null) {					di.setError(700, "The server is sending incomplete response (Mapped Address message attribute is missing). The client should not retry.");					logger.config("Response does not contain a mapped address message attribute.");					return false;				} else {					if ((ma.getPort() != ma2.getPort()) || (!(ma.getAddress().getInetAddress().equals(ma2.getAddress().getInetAddress())))) {						di.setSymmetricCone();						logger.fine("Node is behind a symmetric NAT.");						return false;					}				}				return true;			} catch (SocketTimeoutException ste2) {				if (timeSinceFirstTransmission < 7900) {					logger.config("Test 1 redo with changed address: Socket timeout while receiving the response.");					timeSinceFirstTransmission += timeout;					int timeoutAddValue = (timeSinceFirstTransmission * 2);					if (timeoutAddValue > 1600) timeoutAddValue = 1600;					timeout = timeoutAddValue;				} else {					//TODO: error handling here					logger.config("Test 1 redo with changed address: Socket timeout while receiving the response.  Maximum retry limit exceed. Give up.");					return false;				}			}		}	}		private void test3() throws UtilityException, SocketException, UnknownHostException, IOException, MessageAttributeParsingException, MessageAttributeException, MessageHeaderParsingException {		int timeSinceFirstTransmission = 0;		int timeout = timeoutInitValue;		while (true) {			try {				// Test 3 including response				DatagramSocket sendSocket = new DatagramSocket(new InetSocketAddress(iaddress, 0));				sendSocket.connect(InetAddress.getByName(stunServer), port);				sendSocket.setSoTimeout(timeout);								MessageHeader sendMH = new MessageHeader(MessageHeader.MessageHeaderType.BindingRequest);				sendMH.generateTransactionID();								ChangeRequest changeRequest = new ChangeRequest();				changeRequest.setChangePort();				sendMH.addMessageAttribute(changeRequest);								byte[] data = sendMH.getBytes();				DatagramPacket send = new DatagramPacket(data, data.length);				sendSocket.send(send);				logger.finer("Test 3: Binding Request sent.");								int localPort = sendSocket.getLocalPort();				InetAddress localAddress = sendSocket.getLocalAddress();								sendSocket.close();								DatagramSocket receiveSocket = new DatagramSocket(localPort, localAddress);				receiveSocket.connect(InetAddress.getByName(stunServer), ca.getPort());				receiveSocket.setSoTimeout(timeout);								MessageHeader receiveMH = new MessageHeader();				while (!(receiveMH.equalTransactionID(sendMH))) {					DatagramPacket receive = new DatagramPacket(new byte[200], 200);					receiveSocket.receive(receive);					receiveMH = MessageHeader.parseHeader(receive.getData());				}				ErrorCode ec = (ErrorCode) receiveMH.getMessageAttribute(MessageAttribute.MessageAttributeType.ErrorCode);				if (ec != null) {					di.setError(ec.getResponseCode(), ec.getReason());					logger.config("Message header contains errorcode message attribute.");					return;				}				if (nodeNatted) {					di.setRestrictedCone();					logger.fine("Node is behind a restricted NAT.");				}			} catch (SocketTimeoutException ste) {				if (timeSinceFirstTransmission < 7900) {					logger.finer("Test 3: Socket timeout while receiving the response.");					timeSinceFirstTransmission += timeout;					int timeoutAddValue = (timeSinceFirstTransmission * 2);					if (timeoutAddValue > 1600) timeoutAddValue = 1600;					timeout = timeoutAddValue;				} else {					logger.finer("Test 3: Socket timeout while receiving the response. Maximum retry limit exceed. Give up.");					di.setPortRestrictedCone();					logger.fine("Node is behind a port restricted NAT.");					return;				}			}		}	}}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品亚洲国产成人av制服丝袜| 欧美亚洲图片小说| 9久草视频在线视频精品| 欧美人体做爰大胆视频| 中文一区二区在线观看| 成人免费高清在线| 日韩一区二区高清| 亚洲视频在线观看一区| 国产成人午夜视频| 亚洲精品一区二区三区四区高清| 亚洲国产成人va在线观看天堂| 成人免费视频视频| 久久精品在线观看| 激情综合网天天干| 欧美xxxx在线观看| 久久不见久久见免费视频7| 欧美精品 日韩| 六月婷婷色综合| 欧美在线播放高清精品| 亚洲精品精品亚洲| 色婷婷精品久久二区二区蜜臀av| 国产婷婷色一区二区三区在线| 六月婷婷色综合| 日韩欧美一区电影| 免费黄网站欧美| 日韩女优毛片在线| 久久激情五月激情| 久久综合狠狠综合| 国产91精品露脸国语对白| 国产亚洲精品7777| 盗摄精品av一区二区三区| 国产网站一区二区三区| 国产丶欧美丶日本不卡视频| 国产欧美精品一区| 国产精品456露脸| 国产日本欧洲亚洲| 成人精品小蝌蚪| 一区二区三区在线观看视频| 欧洲精品在线观看| 首页综合国产亚洲丝袜| 777a∨成人精品桃花网| 久久精品国产久精国产爱| 久久综合色一综合色88| av中文一区二区三区| 亚洲精品中文在线影院| 欧美午夜一区二区三区免费大片| 一区二区三区日韩| 91麻豆精品国产自产在线| 狠狠色综合播放一区二区| 国产精品丝袜91| 欧美日韩国产大片| 久久er精品视频| 日本一区二区三区高清不卡| 色成年激情久久综合| 午夜成人在线视频| 日韩视频在线你懂得| 国产毛片精品一区| 亚洲日本乱码在线观看| 欧美福利视频一区| 国产美女娇喘av呻吟久久| 亚洲黄网站在线观看| 精品日本一线二线三线不卡| 白白色 亚洲乱淫| 天堂va蜜桃一区二区三区漫画版| 久久久久久久精| 一本大道久久a久久精二百| 久久国产综合精品| 亚洲免费成人av| 91精品国产一区二区三区蜜臀| 成人涩涩免费视频| 日本欧美在线观看| 亚洲欧美另类在线| 久久婷婷一区二区三区| 欧美日韩三级在线| 白白色亚洲国产精品| 久久精品国产第一区二区三区| 自拍偷拍亚洲综合| 久久一区二区视频| 日韩一卡二卡三卡四卡| 成人h版在线观看| 免费视频一区二区| 亚洲国产日韩一级| 亚洲视频精选在线| 久久久久久久久久久黄色| 欧美日韩国产在线播放网站| 成人午夜在线播放| 久久99蜜桃精品| 亚洲成在人线在线播放| 亚洲同性gay激情无套| 久久综合久久综合久久| 日韩欧美综合在线| 欧美探花视频资源| 色欲综合视频天天天| 成人精品鲁一区一区二区| 日本不卡视频一二三区| 亚洲国产一区二区在线播放| 国产精品白丝在线| 中文字幕免费不卡| 久久免费电影网| 久久综合色鬼综合色| 欧美成人aa大片| 日韩一区二区免费高清| 欧美顶级少妇做爰| 欧美精品在线一区二区三区| 精品视频在线看| 欧美色视频在线| 欧美唯美清纯偷拍| 欧美日韩精品欧美日韩精品| 欧美亚一区二区| 欧美影院精品一区| 欧美日韩成人一区| 欧美一区二区三区视频| 777色狠狠一区二区三区| 在线播放视频一区| 日韩精品中午字幕| 欧美成人午夜电影| 精品国产免费一区二区三区四区| 欧美成人aa大片| 久久先锋影音av鲁色资源| 久久综合精品国产一区二区三区 | 亚洲午夜国产一区99re久久| 亚洲精品一二三| 亚洲国产裸拍裸体视频在线观看乱了| 亚洲精品免费在线播放| 五月天婷婷综合| 免费人成网站在线观看欧美高清| 免费成人美女在线观看.| 国产又黄又大久久| 风流少妇一区二区| 欧美综合一区二区| 日韩写真欧美这视频| 久久久青草青青国产亚洲免观| 中文在线一区二区| 亚洲国产sm捆绑调教视频| 美女网站一区二区| 成人深夜在线观看| 欧美日本一区二区三区| 2023国产精华国产精品| 国产精品电影院| 五月天久久比比资源色| 国产乱对白刺激视频不卡| 91在线精品一区二区| 91精品一区二区三区在线观看| 久久只精品国产| 一区二区三区在线影院| 蜜臀va亚洲va欧美va天堂| 国产成人精品免费在线| 欧美视频一区二区在线观看| 精品三级在线观看| 亚洲一区二区综合| 国产高清在线精品| 欧美日韩亚洲综合在线 欧美亚洲特黄一级 | 久久激情五月激情| 色综合久久久久| 精品精品国产高清a毛片牛牛| 亚洲欧美日韩国产综合| 久久电影国产免费久久电影 | 欧美精品自拍偷拍动漫精品| 国产三级一区二区三区| 亚洲动漫第一页| 国产精品一区二区在线播放| 欧美少妇性性性| 国产精品福利一区| 久久se这里有精品| 欧美女孩性生活视频| 国产精品毛片久久久久久久| 免费成人在线视频观看| 欧美性猛交xxxx黑人交| 亚洲国产精品精华液ab| 美女精品自拍一二三四| 在线观看不卡一区| 国产精品丝袜黑色高跟| 精品一区二区三区在线观看 | 精品视频999| 中文字幕一区二区三区视频 | 亚洲成人综合视频| www.爱久久.com| 26uuu国产一区二区三区| 日韩影院精彩在线| 欧美色网一区二区| 一区二区三区中文字幕电影| 成人动漫中文字幕| 久久久av毛片精品| 国产麻豆精品视频| 久久综合九色欧美综合狠狠| 麻豆一区二区99久久久久| 欧美一级高清大全免费观看| 亚洲在线视频网站| 欧美色综合网站| 亚洲成人av电影| 精品视频一区二区不卡| 亚洲成人中文在线| 欧美精品日韩一本| 午夜日韩在线观看| 欧美视频一区二区三区四区| 亚洲人吸女人奶水| 欧美综合一区二区| 亚洲成人免费av| 日韩亚洲欧美在线| 久久国产欧美日韩精品|