NetworkInterfaceの使用
6086 ワード
回転元:http://zyslovely.iteye.com/blog/838512
1. java.net.NetworkInterfaceクラスの使用1.3.java.net.NetworkInterfaceの方法.NetworkInterfaceは、jdk 1である多くのネットワークインタフェース情報を取得する方法を定義する.6バージョン以降に加入しました.主に以下の方法があります.String displayName()は、ネットワークインタフェースの表示名byte[]getHardwareAddress()を取得し、ネットワークインタフェースの物理アドレスを取得します.通常、MACアドレスint getMTU()がこのインタフェースを返す最大転送ユニット(Maximum Transmission Unit,MTU)String getName()は、このネットワークインタフェースの名前boolean isLoopback()を取得し、ネットワークインタフェースが返信インタフェースboolean isPointToPoint()ネットワークインタフェースがポイントインタフェースboolean isUp()であるかどうかを返すネットワークインタフェースがboolean isVirtual()を開いて実行しているかどうかを返します.このインタフェースが仮想インタフェース(サブインタフェースとも呼ばれます)であるかどうかを返します.次の例では、ローカルネットワークインタフェースを取得し、その情報を表示する方法を示します.
Javaコード
package org.dakiler.javanet.chapter1; import java.net.NetworkInterface; import java.util.Enumeration; public class Example6 { public static void main(String args[])throws Exception { Enumeratione=NetworkInterface.getNetworkInterfaces(); while(e.hasMoreElements()) { NetworkInterface ni=e.nextElement(); System.out.println("displayname: "+ni.getDisplayName()); System.out.println("name: "+ni.getName()); System.out.println("MTU: "+ni.getMTU()); System.out.println("Loopback: "+ni.isLoopback()); System.out.println("Virtual: "+ni.isVirtual()); System.out.println("Up: "+ni.isUp()); System.out.println("PointToPoint: "+ni.isPointToPoint()); byte[]mac=ni.getHardwareAddress(); if(mac!=null) displayMac(mac); else System.out.println("mac is null"); System.out.println("-----"); } } public static void displayMac(byte[] mac) { for(int i=0;i { byte b=mac[i]; int intValue=0; if(b>=0)intValue=b; else intValue=256+b; System.out.print(Integer.toHexString(intValue)); if(i!=mac.length-1) System.out.print("-"); } System.out.println(); } }
1.4. その他java.net.NetworkInterfaceは、apiがネットワークインタフェースにアクセスするための情報を提供するが、いずれも基本情報を取得するだけであり、データリンク層の制御に対するapiは提供する.またjava標準バージョンでは、ネットワーク層以下の制御は提供されておらず、サードパーティのAPIを使用する必要があります.有名なのはJPCAPです.JPCAPはwincap/libpcapを呼び出し、JAVA言語に共通のインタフェースを提供し、プラットフォームの無関係性を実現した.このAPIは、データリンク層で受信パケットを送信する機能を提供する.詳細については、JPCAPのテクニカルドキュメントを参照してください.
1. java.net.NetworkInterfaceクラスの使用1.3.java.net.NetworkInterfaceの方法.NetworkInterfaceは、jdk 1である多くのネットワークインタフェース情報を取得する方法を定義する.6バージョン以降に加入しました.主に以下の方法があります.String displayName()は、ネットワークインタフェースの表示名byte[]getHardwareAddress()を取得し、ネットワークインタフェースの物理アドレスを取得します.通常、MACアドレスint getMTU()がこのインタフェースを返す最大転送ユニット(Maximum Transmission Unit,MTU)String getName()は、このネットワークインタフェースの名前boolean isLoopback()を取得し、ネットワークインタフェースが返信インタフェースboolean isPointToPoint()ネットワークインタフェースがポイントインタフェースboolean isUp()であるかどうかを返すネットワークインタフェースがboolean isVirtual()を開いて実行しているかどうかを返します.このインタフェースが仮想インタフェース(サブインタフェースとも呼ばれます)であるかどうかを返します.次の例では、ローカルネットワークインタフェースを取得し、その情報を表示する方法を示します.
Javaコード
package org.dakiler.javanet.chapter1;
import java.net.NetworkInterface;
import java.util.Enumeration;
public class Example6
{
public static void main(String args[])throws Exception
{
Enumeration<NetworkInterface>e=NetworkInterface.getNetworkInterfaces();
while(e.hasMoreElements())
{
NetworkInterface ni=e.nextElement();
System.out.println("displayname: "+ni.getDisplayName());
System.out.println("name: "+ni.getName());
System.out.println("MTU: "+ni.getMTU());
System.out.println("Loopback: "+ni.isLoopback());
System.out.println("Virtual: "+ni.isVirtual());
System.out.println("Up: "+ni.isUp());
System.out.println("PointToPoint: "+ni.isPointToPoint());
byte[]mac=ni.getHardwareAddress();
if(mac!=null)
displayMac(mac);
else System.out.println("mac is null");
System.out.println("-----");
}
}
public static void displayMac(byte[] mac)
{
for(int i=0;i<mac.length;i++)
{
byte b=mac[i];
int intValue=0;
if(b>=0)intValue=b;
else intValue=256+b;
System.out.print(Integer.toHexString(intValue));
if(i!=mac.length-1)
System.out.print("-");
}
System.out.println();
}
}
1.4. その他java.net.NetworkInterfaceは、apiがネットワークインタフェースにアクセスするための情報を提供するが、いずれも基本情報を取得するだけであり、データリンク層の制御に対するapiは提供する.またjava標準バージョンでは、ネットワーク層以下の制御は提供されておらず、サードパーティのAPIを使用する必要があります.有名なのはJPCAPです.JPCAPはwincap/libpcapを呼び出し、JAVA言語に共通のインタフェースを提供し、プラットフォームの無関係性を実現した.このAPIは、データリンク層で受信パケットを送信する機能を提供する.詳細については、JPCAPのテクニカルドキュメントを参照してください.