2008-09-19 34 views

回答

3

下面是公式:2 ^(32 - 網絡掩碼) - 2其中,網絡掩碼的位數如上面思科表示法中所示。所以具有/ 30掩碼的網絡有2個可用地址。

最低的網絡號總是表示網段本身,最高的一直是廣播......這導致公式結尾爲-2。

對於標準表示法,轉換一個aaa.bbb.ccc.ddd掩碼成無符號的4字節整數(許多網絡庫具有此功能)並減去從2^32 - 2

2

其中n是後號碼「/」

>>> def number_of_hosts(n): 
...  return 2 ** (32 - n) 
... 
>>> number_of_hosts(32) 
1 
>>> number_of_hosts(30) 
4 
+0

我敢說,只要在整數上下文中使用2 ** x,就可以用1 << x來代替。 :-P – 2008-09-19 02:20:17

+0

記得爲廣播和網絡地址減2。 – 2008-09-19 02:20:22

0

2 ^(32-N) - 2,其中n是你的電話號碼,在這種情況下,30的數量n,給你被覆蓋在比特數地址範圍,爲您的網絡留下32-n位。因此,總共有2 ^(32-n)個地址。你減去2的網絡和廣播地址來得到你的答案。

0

與/ 30你只有4個主機可能。

32-30 = 2

2^2 = 4

與/ 24你有256個主機可能 32-24 = 8

8^2 = 256

與/ 23你有512個主機可能 32-23 = 9

9^2 = 512

其是因爲子網的比特表示的掩模

255.255.255.252轉換成

11111111.11111111.11111111.11111100

說明該2個最後字節= 0。 這是相同的2在32 - 30 = 2

而且,你失去2的IP在每個子網,一個是廣播地址和網關地址的一個

2

方法1:

package com.test; 

import java.net.InetAddress; 
import java.net.NetworkInterface; 
import java.net.SocketException; 
import java.net.UnknownHostException; 
import java.util.Enumeration; 

public class EasyNet { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     // TODO Auto-generated method stub 

     try { 
       InetAddress localhost = InetAddress.getLocalHost(); 
       System.out.println(" IP Addr: " + localhost.getHostAddress()); 
       // Just in case this host has multiple IP addresses.... 
       InetAddress[] allMyIps = InetAddress.getAllByName(localhost.getCanonicalHostName()); 
       if (allMyIps != null && allMyIps.length > 1) { 
       System.out.println(" Full list of IP addresses:"); 
       for (int i = 0; i < allMyIps.length; i++) { 
        System.out.println(" " + allMyIps[i]); 
       } 
       } 
      } catch (UnknownHostException e) { 
       System.out.println(" (error retrieving server host name)"); 
      } 

      try { 
       System.out.println("Full list of Network Interfaces:"); 
       for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) { 
       NetworkInterface intf = en.nextElement(); 
       System.out.println(" " + intf.getName() + " " + intf.getDisplayName()); 
       for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) 
       { 
        System.out.println("  " + enumIpAddr.nextElement().toString()); 
       } 
       } 
      } catch (SocketException e) { 
       System.out.println(" (error retrieving network interface list)"); 
      } 
    } 

} 

方法2:

package com.test; 

import java.net.*; 
import java.util.*; 

public class GetIp { 

    public static void main(String args[]) throws Exception { 

    Enumeration<NetworkInterface> nets = 
    NetworkInterface.getNetworkInterfaces(); 

    for (NetworkInterface netint : Collections.list(nets)) { 
    System.out.println("\nDisplay name : " + netint.getDisplayName()); 

    Enumeration<InetAddress> inetAddresses = netint.getInetAddresses(); 

    for (InetAddress inetAddress : Collections.list(inetAddresses)) { 

    System.out.println("InetAddress : " + inetAddress); 
    } 
    } 
    } 
} 

方法3

package com.test; 

import java.io.IOException; 
import java.net.InetAddress; 

public class Nethosts { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     try{ 
     InetAddress localhost = InetAddress.getLocalHost(); 
     // this code assumes IPv4 is used 
     byte[] ip = localhost.getAddress(); 
     checkHosts(ip.toString()); 
     } 
     catch(Exception e){ 
      e.printStackTrace(); 
     } 


    } 
    public static void checkHosts(String subnet){ 
      int timeout=1000; 
      for (int i=1;i<254;i++){ 
       try{ 
       String host=subnet + "." + i; 
       if (InetAddress.getByName(host).isReachable(timeout)){ 
        System.out.println(host + " is reachable"); 
       } 
       } 
       catch(IOException e){e.printStackTrace();} 
      } 
     } 
} 

方法4:

package com.test; 

import java.awt.List; 
import java.net.InetAddress; 
import java.net.InterfaceAddress; 
import java.net.NetworkInterface; 
import java.net.SocketException; 
import java.net.UnknownHostException; 
import java.util.ArrayList; 
import java.util.Enumeration; 

public class Netintr { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     try 
      { 
      System.out.println("Output of Network Interrogation:"); 
      System.out.println("********************************\n"); 

      InetAddress theLocalhost = InetAddress.getLocalHost(); 
      System.out.println(" LOCALHOST INFO"); 
      if(theLocalhost != null) 
      { 
       System.out.println("   host: " + theLocalhost.getHostName()); 
       System.out.println("   class: " + theLocalhost.getClass().getSimpleName()); 
       System.out.println("   ip: " + theLocalhost.getHostAddress()); 
       System.out.println("   chost: " + theLocalhost.getCanonicalHostName()); 
       System.out.println("  byteaddr: " + toMACAddrString(theLocalhost.getAddress())); 
       System.out.println(" sitelocal?: " + theLocalhost.isSiteLocalAddress()); 
       System.out.println(""); 
      } 
      else 
      { 
       System.out.println(" localhost was null"); 
      } 

      Enumeration<NetworkInterface> theIntfList = NetworkInterface.getNetworkInterfaces(); 
      ArrayList<InterfaceAddress> theAddrList = null; 
      NetworkInterface theIntf = null; 
      InetAddress theAddr = null; 

      while(theIntfList.hasMoreElements()) 
      { 
       theIntf = theIntfList.nextElement(); 

       System.out.println("--------------------"); 
       System.out.println(" " + theIntf.getDisplayName()); 
       System.out.println("   name: " + theIntf.getName()); 
       System.out.println("   mac: " + toMACAddrString(theIntf.getHardwareAddress())); 
       System.out.println("   mtu: " + theIntf.getMTU()); 
       System.out.println("  mcast?: " + theIntf.supportsMulticast()); 
       System.out.println("  loopback?: " + theIntf.isLoopback()); 
       System.out.println("   ptp?: " + theIntf.isPointToPoint()); 
       System.out.println("  virtual?: " + theIntf.isVirtual()); 
       System.out.println("   up?: " + theIntf.isUp()); 

       theAddrList = (ArrayList<InterfaceAddress>) theIntf.getInterfaceAddresses(); 
       System.out.println("  int addrs: " + theAddrList.size() + " total."); 
       int addrindex = 0; 
       for(InterfaceAddress intAddr : theAddrList) 
       { 
        addrindex++; 
        theAddr = intAddr.getAddress(); 
        System.out.println("   " + addrindex + ")."); 
        System.out.println("   host: " + theAddr.getHostName()); 
        System.out.println("   class: " + theAddr.getClass().getSimpleName()); 
        System.out.println("    ip: " + theAddr.getHostAddress() + "/" + intAddr.getNetworkPrefixLength()); 
        System.out.println("   bcast: " + intAddr.getBroadcast().getHostAddress()); 
        int maskInt = Integer.MIN_VALUE >> (intAddr.getNetworkPrefixLength()-1); 
        System.out.println("   mask: " + toIPAddrString(maskInt)); 
        System.out.println("   chost: " + theAddr.getCanonicalHostName()); 
        System.out.println("  byteaddr: " + toMACAddrString(theAddr.getAddress())); 
        System.out.println("  sitelocal?: " + theAddr.isSiteLocalAddress()); 
        System.out.println(""); 
       } 
      } 
      } 
      catch (SocketException e) 
      { 
      e.printStackTrace(); 
      } 
      catch (UnknownHostException e) 
      { 
      e.printStackTrace(); 
      } 

    } 


    public static String toMACAddrString(byte[] a) { if (a == null) { return "null"; } int iMax = a.length - 1; 

     if (iMax == -1) 
     { 
     return "[]"; 
     } 

     StringBuilder b = new StringBuilder(); 
     b.append('['); 
     for (int i = 0;; i++) 
     { 
     b.append(String.format("%1$02x", a[i])); 

     if (i == iMax) 
     { 
      return b.append(']').toString(); 
     } 
     b.append(":"); 
     } 
    } 

    public static String toIPAddrString(int ipa) 
    { 
     StringBuilder b = new StringBuilder(); 
     b.append(Integer.toString(0x000000ff & (ipa >> 24))); 
     b.append("."); 
     b.append(Integer.toString(0x000000ff & (ipa >> 16))); 
     b.append("."); 
     b.append(Integer.toString(0x000000ff & (ipa >> 8))); 
     b.append("."); 
     b.append(Integer.toString(0x000000ff & (ipa))); 
     return b.toString(); 
    } 

} 

方法5

package com.test; 

import java.io.IOException; 
import java.net.InetAddress; 

public class NetworkPing { 

    /** 
    * JavaProgrammingForums.com 
    */ 
    public static void main(String[] args) throws IOException { 

     InetAddress localhost = InetAddress.getLocalHost(); 
     // this code assumes IPv4 is used 
     byte[] ip = localhost.getAddress(); 

     for (int i = 1; i <= 254; i++) 
     { 
      ip[3] = (byte)i; 
      InetAddress address = InetAddress.getByAddress(ip); 
     if (address.isReachable(1000)) 
     { 
      System.out.println(address + " machine is turned on and can be pinged"); 
     } 
     else if (!address.getHostAddress().equals(address.getHostName())) 
     { 
      //hostName is the Machine name and hostaddress is the ip addr 
      System.out.println(address + " machine is known in a DNS lookup"); 
     } 
     else 
     { 
      System.out.println(address + " the host address and host name are equal, meaning the host name could not be resolved"); 
     } 
     } 

    } 
} 

方法6

package com.test; 

import java.net.*; 
import java.util.*; 

public class NIC { 

public static void main(String args[]) throws Exception { 

    List<InetAddress> addrList = new ArrayList<InetAddress>(); 
    Enumeration<NetworkInterface> interfaces = null; 
    try { 
     interfaces = NetworkInterface.getNetworkInterfaces(); 
    } catch (SocketException e) { 
     e.printStackTrace(); 
    } 

    InetAddress localhost = null; 

    try { 
     localhost = InetAddress.getByName("127.0.0.1"); 
    } catch (UnknownHostException e) { 
     e.printStackTrace(); 
    } 

    while (interfaces.hasMoreElements()) { 
     NetworkInterface ifc = interfaces.nextElement(); 
     Enumeration<InetAddress> addressesOfAnInterface = ifc.getInetAddresses(); 

     while (addressesOfAnInterface.hasMoreElements()) { 
      InetAddress address = addressesOfAnInterface.nextElement(); 

      if (!address.equals(localhost) && !address.toString().contains(":")) { 
       addrList.add(address); 
       System.out.println("FOUND ADDRESS ON NIC: " + address.getHostAddress()); 
      } 
     } 
    } 

} 
}