Mercurial > hg > Members > riono > TreeVNC_ja_comment
diff src/main/java/jp/ac/u_ryukyu/treevnc/TreeVNCNetwork.java @ 208:f1d7cb4a1868
compute netmask and netaddress
author | oc |
---|---|
date | Wed, 02 Jul 2014 18:52:29 +0900 |
parents | b31903e5b02d |
children | 2132018b8c68 |
line wrap: on
line diff
--- a/src/main/java/jp/ac/u_ryukyu/treevnc/TreeVNCNetwork.java Wed Jul 02 18:14:20 2014 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/treevnc/TreeVNCNetwork.java Wed Jul 02 18:52:29 2014 +0900 @@ -1,6 +1,7 @@ package jp.ac.u_ryukyu.treevnc; import java.net.InetAddress; +import java.net.InterfaceAddress; import java.net.NetworkInterface; import java.net.Socket; import java.net.SocketException; @@ -23,20 +24,49 @@ } public void getNetworkInterfaces() throws SocketException { - for (Enumeration<NetworkInterface> e = NetworkInterface.getNetworkInterfaces(); e.hasMoreElements();) { - NetworkInterface ni; - ni = e.nextElement(); - if (ni.isUp() && ni.supportsMulticast() && !ni.isLoopback()) { - String hostName = ni.getInetAddresses().nextElement().getHostAddress(); - TreeManagement treeManager = new TreeManagement(hostName, ConnectionParams.DEFAULT_VNC_ROOT, myRfb.getViewer().getShowTree()); - treeManager.getList().getFirst().setPort(myRfb.getAcceptPort()); - addNetworkInterface(ni, treeManager); - System.out.println("Interfaces :" + ni.getName()); - } + for (Enumeration<NetworkInterface> e = NetworkInterface.getNetworkInterfaces(); e.hasMoreElements();) { + NetworkInterface ni = e.nextElement(); + if (ni.isUp() && ni.supportsMulticast() && !ni.isLoopback()) { + for (InterfaceAddress ipaddress : ni.getInterfaceAddresses()) { + byte [] netmask = getNetMask(ipaddress); + String hostName = ipaddress.getAddress().getHostName(); + TreeManagement treeManager = new TreeManagement(hostName, ConnectionParams.DEFAULT_VNC_ROOT, myRfb.getViewer().getShowTree()); + treeManager.getList().getFirst().setPort(myRfb.getAcceptPort()); + byte[] netaddr = ipaddress.getAddress().getAddress(); + for(int i=0;i<netaddr.length;i++) { + netaddr[i] &= netmask[i]; + } + treeManager.setNetMask(netmask,netaddr); + addNetworkInterface(ni, treeManager); + System.out.println("Interfaces :" + ni.getName()); + } + } } } - NetworkInterface getInterface(Socket vncSocket) { + private byte[] getNetMask(InterfaceAddress ipaddress) { + short prefix = ipaddress.getNetworkPrefixLength(); + byte[] netmask = ipaddress.getAddress().getAddress(); + for(int i = 0; i < netmask.length; i++) { + int bitpos = i * 8; + if (bitpos > prefix) { + netmask[i] = 0; + } else if (bitpos+8 > prefix) { + // ex. bitpos = 0, prefix = 2 + // bitpos+8-prefix + // 1100 0000 + int bytemask = 0x80; + for(int j = 1; j < bitpos+8-prefix; j++) { + bytemask >>= 1; + bytemask |= 0x80; + } + netmask[i] = (byte)bytemask; + } + } + return netmask ; + } + + NetworkInterface getInterface(Socket vncSocket) { InetAddress address = vncSocket.getInetAddress(); try { return NetworkInterface.getByInetAddress(address); @@ -57,4 +87,6 @@ return interfaces.get(intf); } + + }