📄 networkadminimpl.java
字号:
addPropertyChangeListener(
NetworkAdminPropertyChangeListener listener )
{
listeners.add( listener );
}
public void
removePropertyChangeListener(
NetworkAdminPropertyChangeListener listener )
{
listeners.remove( listener );
}
public void
generateDiagnostics(
IndentWriter iw )
{
Set public_addresses = new HashSet();
NetworkAdminHTTPProxy proxy = getHTTPProxy();
if ( proxy == null ){
iw.println( "HTTP proxy: none" );
}else{
iw.println( "HTTP proxy: " + proxy.getName());
try{
NetworkAdminHTTPProxy.Details details = proxy.getDetails();
iw.println( " name: " + details.getServerName());
iw.println( " resp: " + details.getResponse());
iw.println( " auth: " + details.getAuthenticationType());
}catch( NetworkAdminException e ){
iw.println( " failed: " + e.getLocalizedMessage());
}
}
NetworkAdminSocksProxy[] socks = getSocksProxies();
if ( socks.length == 0 ){
iw.println( "Socks proxy: none" );
}else{
for (int i=0;i<socks.length;i++){
NetworkAdminSocksProxy sock = socks[i];
iw.println( "Socks proxy: " + sock.getName());
try{
String[] versions = sock.getVersionsSupported();
String str = "";
for (int j=0;j<versions.length;j++){
str += (j==0?"":",") + versions[j];
}
iw.println( " version: " + str );
}catch( NetworkAdminException e ){
iw.println( " failed: " + e.getLocalizedMessage());
}
}
}
NetworkAdminNATDevice[] nat_devices = getNATDevices();
iw.println( "NAT Devices: " + nat_devices.length );
for (int i=0;i<nat_devices.length;i++){
NetworkAdminNATDevice device = nat_devices[i];
iw.println( " " + device.getName() + ",address=" + device.getAddress().getHostAddress() + ":" + device.getPort() + ",ext=" + device.getExternalAddress());
public_addresses.add( device.getExternalAddress());
}
iw.println( "Interfaces" );
/*
NetworkAdminNetworkInterface[] interfaces = getInterfaces();
if ( interfaces.length > 0 ){
if ( interfaces.length > 1 || interfaces[0].getAddresses().length > 1 ){
for (int i=0;i<interfaces.length;i++){
networkInterface interf = (networkInterface)interfaces[i];
iw.indent();
try{
interf.generateDiagnostics( iw, public_addresses );
}finally{
iw.exdent();
}
}
}else{
if ( interfaces[0].getAddresses().length > 0 ){
networkInterface.networkAddress address = (networkInterface.networkAddress)interfaces[0].getAddresses()[0];
try{
NetworkAdminNode[] nodes = address.getRoute( InetAddress.getByName("www.google.com"), 30000, trace_route_listener );
for (int i=0;i<nodes.length;i++){
networkInterface.networkAddress.networkNode node = (networkInterface.networkAddress.networkNode)nodes[i];
iw.println( node.getString());
}
}catch( Throwable e ){
iw.println( "Can't resolve host for route trace - " + e.getMessage());
}
}
}
}
*/
iw.println( "Inbound protocols: default routing" );
NetworkAdminProtocol[] protocols = getInboundProtocols();
for (int i=0;i<protocols.length;i++){
NetworkAdminProtocol protocol = protocols[i];
try{
InetAddress ext_addr = testProtocol( protocol );
if ( ext_addr != null ){
public_addresses.add( ext_addr );
}
iw.println( " " + protocol.getName() + " - " + ext_addr );
}catch( NetworkAdminException e ){
iw.println( " " + protocol.getName() + " - " + Debug.getNestedExceptionMessage(e));
}
}
iw.println( "Outbound protocols: default routing" );
protocols = getOutboundProtocols();
for (int i=0;i<protocols.length;i++){
NetworkAdminProtocol protocol = protocols[i];
try{
InetAddress ext_addr = testProtocol( protocol );
if ( ext_addr != null ){
public_addresses.add( ext_addr );
}
iw.println( " " + protocol.getName() + " - " + ext_addr );
}catch( NetworkAdminException e ){
iw.println( " " + protocol.getName() + " - " + Debug.getNestedExceptionMessage(e));
}
}
Iterator it = public_addresses.iterator();
iw.println( "Public Addresses" );
while( it.hasNext()){
InetAddress pub_address = (InetAddress)it.next();
try{
NetworkAdminASNLookup res = lookupASN( pub_address );
iw.println( " " + pub_address.getHostAddress() + " -> " + res.getAS() + "/" + res.getASName());
}catch( Throwable e ){
iw.println( " " + pub_address.getHostAddress() + " -> " + Debug.getNestedExceptionMessage(e));
}
}
}
protected class
networkInterface
implements NetworkAdminNetworkInterface
{
private NetworkInterface ni;
protected
networkInterface(
NetworkInterface _ni )
{
ni = _ni;
}
public String
getDisplayName()
{
return( ni.getDisplayName());
}
public String
getName()
{
return( ni.getName());
}
public NetworkAdminNetworkInterfaceAddress[]
getAddresses()
{
// BAH NetworkInterface has lots of goodies but is 1.6
Enumeration e = ni.getInetAddresses();
List addresses = new ArrayList();
while( e.hasMoreElements()){
addresses.add( new networkAddress((InetAddress)e.nextElement()));
}
return((NetworkAdminNetworkInterfaceAddress[])addresses.toArray( new NetworkAdminNetworkInterfaceAddress[addresses.size()]));
}
public void
generateDiagnostics(
IndentWriter iw,
Set public_addresses )
{
iw.println( getDisplayName() + "/" + getName());
NetworkAdminNetworkInterfaceAddress[] addresses = getAddresses();
for (int i=0;i<addresses.length;i++){
networkAddress addr = (networkAddress)addresses[i];
iw.indent();
try{
addr.generateDiagnostics( iw, public_addresses );
}finally{
iw.exdent();
}
}
}
protected class
networkAddress
implements NetworkAdminNetworkInterfaceAddress
{
private InetAddress address;
protected
networkAddress(
InetAddress _address )
{
address = _address;
}
public InetAddress
getAddress()
{
return( address );
}
public boolean
isLoopback()
{
return( address.isLoopbackAddress());
}
public NetworkAdminNode[]
getRoute(
InetAddress target,
final int max_millis,
final NetworkAdminRouteListener listener )
throws NetworkAdminException
{
PlatformManager pm = PlatformManagerFactory.getPlatformManager();
if ( !pm.hasCapability( PlatformManagerCapabilities.TraceRouteAvailability )){
throw( new NetworkAdminException( "No trace-route capability on platform" ));
}
final List nodes = new ArrayList();
try{
pm.traceRoute(
address,
target,
new PlatformManagerPingCallback()
{
private long start_time = SystemTime.getCurrentTime();
public boolean
reportNode(
int distance,
InetAddress address,
int millis )
{
boolean timeout = false;
if ( max_millis >= 0 ){
long now = SystemTime.getCurrentTime();
if ( now < start_time ){
start_time = now;
}
if ( now - start_time >= max_millis ){
timeout = true;
}
}
NetworkAdminNode node = null;
if ( address != null ){
node = new networkNode( address, distance, millis );
nodes.add( node );
}
boolean result;
if ( listener == null ){
result = true;
}else{
if ( node == null ){
result = listener.timeout( distance );
}else{
result = listener.foundNode( node, distance, millis );
}
}
return( result && !timeout );
}
});
}catch( PlatformManagerException e ){
throw( new NetworkAdminException( "trace-route failed", e ));
}
return((NetworkAdminNode[])nodes.toArray( new NetworkAdminNode[nodes.size()]));
}
public InetAddress
testProtocol(
NetworkAdminProtocol protocol )
throws NetworkAdminException
{
return( protocol.test( this ));
}
public void
generateDiagnostics(
IndentWriter iw,
Set public_addresses )
{
iw.println( "" + getAddress());
try{
iw.println( " Trace route" );
iw.indent();
if ( isLoopback()){
iw.println( "Loopback - ignoring" );
}else{
try{
NetworkAdminNode[] nodes = getRoute( InetAddress.getByName("www.google.com"), 30000, trace_route_listener );
for (int i=0;i<nodes.length;i++){
networkNode node = (networkNode)nodes[i];
iw.println( node.getString());
}
}catch( Throwable e ){
iw.println( "Can't resolve host for route trace - " + e.getMessage());
}
iw.println( "Outbound protocols: bound" );
NetworkAdminProtocol[] protocols = getOutboundProtocols();
for (int i=0;i<protocols.length;i++){
NetworkAdminProtocol protocol = protocols[i];
try{
InetAddress res = testProtocol( protocol );
if ( res != null ){
public_addresses.add( res );
}
iw.println( " " + protocol.getName() + " - " + res );
}catch( NetworkAdminException e ){
iw.println( " " + protocol.getName() + " - " + Debug.getNestedExceptionMessage(e));
}
}
iw.println( "Inbound protocols: bound" );
protocols = getInboundProtocols();
for (int i=0;i<protocols.length;i++){
NetworkAdminProtocol protocol = protocols[i];
try{
InetAddress res = testProtocol( protocol );
if ( res != null ){
public_addresses.add( res );
}
iw.println( " " + protocol.getName() + " - " + res );
}catch( NetworkAdminException e ){
iw.println( " " + protocol.getName() + " - " + Debug.getNestedExceptionMessage(e));
}
}
}
}finally{
iw.exdent();
}
}
protected class
networkNode
implements NetworkAdminNode
{
private InetAddress address;
private int distance;
private int rtt;
protected
networkNode(
InetAddress _address,
int _distance,
int _millis )
{
address = _address;
distance = _distance;
rtt = _millis;
}
public InetAddress
getAddress()
{
return( address );
}
public boolean
isLocalAddress()
{
return( address.isLinkLocalAddress() || address.isSiteLocalAddress());
}
public int
getDistance()
{
return( distance );
}
public int
getRTT()
{
return( rtt );
}
protected String
getString()
{
if ( address == null ){
return( "" + distance );
}else{
return( distance + "," + address + "[local=" + isLocalAddress() + "]," + rtt );
}
}
}
}
}
protected void
generateDiagnostics(
IndentWriter iw,
NetworkAdminProtocol[] protocols )
{
for (int i=0;i<protocols.length;i++){
NetworkAdminProtocol protocol = protocols[i];
iw.println( "Testing " + protocol.getName());
try{
InetAddress ext_addr = testProtocol( protocol );
iw.println( " -> OK, public address=" + ext_addr );
}catch( NetworkAdminException e ){
iw.println( " -> Failed: " + Debug.getNestedExceptionMessage(e));
}
}
}
public void
logNATStatus(
IndentWriter iw )
{
generateDiagnostics( iw, getInboundProtocols());
}
public static void
main(
String[] args )
{
boolean TEST_SOCKS_PROXY = false;
boolean TEST_HTTP_PROXY = false;
try{
if ( TEST_SOCKS_PROXY ){
AESocksProxy proxy = AESocksProxyFactory.create( 4567, 10000, 10000 );
proxy.setAllowExternalConnections( true );
System.setProperty( "socksProxyHost", "localhost" );
System.setProperty( "socksProxyPort", "4567" );
}
if ( TEST_HTTP_PROXY ){
System.setProperty("http.proxyHost", "localhost" );
System.setProperty("http.proxyPort", "3128" );
System.setProperty("https.proxyHost", "localhost" );
System.setProperty("https.proxyPort", "3128" );
Authenticator.setDefault(
new Authenticator()
{
protected AEMonitor auth_mon = new AEMonitor( "SESecurityManager:auth");
protected PasswordAuthentication
getPasswordAuthentication()
{
return( new PasswordAuthentication( "fred", "bill".toCharArray()));
}
});
}
IndentWriter iw = new IndentWriter( new PrintWriter( System.out ));
iw.setForce( true );
COConfigurationManager.initialise();
AzureusCoreFactory.create();
getSingleton().logNATStatus( iw );
}catch( Throwable e){
e.printStackTrace();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -