Как программно узнать, находится ли машина в глобальной / частной сети - PullRequest
1 голос
/ 06 сентября 2010

Я пытаюсь написать программу на Java, чтобы узнать, находится ли компьютер в глобальной / частной сети или нет.Ниже приведен мой фрагмент кода.Я думал, что если машина обнаруживает только адрес обратной связи (127.0.0.1 или ::1), то можно предположить, что машина не находится в сети.Но в одной из Систем, где включена многоадресная рассылка, я получаю следующие IP-адреса, отличные от адреса обратной связи.

fe80::20c:29ff:fe90:8041
ff01::1,
ff02::1
ff02::1:ff90:8041
fe80::ffff:ffff:fffd
::1
fe80::1
127.0.0.1
224.0.0.1

Фрагмент кода:

private static ArrayList< InetAddress > getInetAddresses( ) throws IPAddressException
    {

        ArrayList< InetAddress > arrayIPAddress = new ArrayList< InetAddress >( );

        try
        {
            Enumeration< NetworkInterface > networkInterfaces = NetworkInterface.getNetworkInterfaces( );

            if ( networkInterfaces == null )
            {
                throw new IPAddressException( "NetworkInterface Not found" );
            }

            while ( networkInterfaces.hasMoreElements( ) )
            {
                NetworkInterface card = ( NetworkInterface ) networkInterfaces.nextElement( );

                Enumeration< InetAddress > addresses = card.getInetAddresses( );

                if ( addresses == null )
                {
                    continue;
                }

                while ( addresses.hasMoreElements( ) )
                {
                    InetAddress inetAddress = ( InetAddress ) addresses.nextElement( );
                    arrayIPAddress.add( inetAddress );

                }
            }
        }
        catch ( SocketException obj )
        {
            throw new IPAddressException( "NetworkInterface Not found" );
        }

        return arrayIPAddress;
    }

Отчет IPConfig:

C:\Documents and Settings\Administrator>ipconfig /all

Windows IP Configuration

   Host Name . . . . . . . . . . . . : vm13autopassdl1
   Primary Dns Suffix  . . . . . . . :
   Node Type . . . . . . . . . . . . : Unknown
   IP Routing Enabled. . . . . . . . : No
   WINS Proxy Enabled. . . . . . . . : No
   DNS Suffix Search List. . . . . . : ind.hp.com
                                       india.hp.com

Ethernet adapter Local Area Connection 2:

   Media State . . . . . . . . . . . : Media disconnected
   Description . . . . . . . . . . . : Intel(R) PRO/1000 MT Network Connection #
2
   Physical Address. . . . . . . . . : 00-0C-29-90-80-41

Tunnel adapter Teredo Tunneling Pseudo-Interface:

   Connection-specific DNS Suffix  . :
   Description . . . . . . . . . . . : Teredo Tunneling Pseudo-Interface
   Physical Address. . . . . . . . . : FF-FF-FF-FF-FF-FF-FF-FF
   DHCP Enabled. . . . . . . . . . . : No
   IP Address. . . . . . . . . . . . : fe80::ffff:ffff:fffd%4
   Default Gateway . . . . . . . . . :
   NetBIOS over Tcpip. . . . . . . . : Disabled

Есть ли какой-либо другой способ обнаружить, что аппарат не находится в сети?

Ответы [ 2 ]

0 голосов
/ 07 сентября 2010

В дополнение к адресам обратной связи 127.0.0.1 и ::1 следует также игнорировать:

  • IPv6-адреса локальных ссылок - они начинаются с fe8, fe9, fea или feb.
  • IPv4-адреса многоадресной рассылки - они начинаются с 224 до 239.
  • IPv6-адреса многоадресной рассылки - они начинаются с ff.
0 голосов
/ 06 сентября 2010

Я бы попытался выяснить, можно ли подключиться к известному сайту в Интернете (например, google.com, microsoft.com), используя известный порт (например, 80).Если можете, то вы в интернете;если вы не можете, то вы можете не быть.Обратите внимание, что корпоративные правила брандмауэра могут по-прежнему мешать тому, что вы пытаетесь сделать, даже если вы находитесь в Интернете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...