0

私はJavaでのソケットプログラミングが初めてです。ソケットプログラミングでIPアドレスを使用せずにMACアドレスを取得する方法を教えてください。

これは、ソケットでMACアドレスを取得できるコードです--

NetworkInterface ネットワーク = NetworkInterface.getByInetAddress(ip);

    byte[] mac = network.getHardwareAddress();

    System.out.print("Current MAC address : ");

    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < mac.length; i++) {
        sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-              " : ""));      
    }
    System.out.println(sb.toString());

しかし、これは最終的にIPアドレスを使用しています.IPアドレスを使用せずにMACアドレスを取得する方法はありますか?

4

3 に答える 3

2

ソケットを使用した任意の PC の MAC アドレス

簡単に言えば、サブネット外のホストの MAC アドレスを見つけるための信頼できる方法はありません。

問題のホストと同じサブネット上にいる場合は、ARPRARPを調べてください。

于 2013-03-23T08:28:15.670 に答える
1

MAC アドレスは、ローカル ネットワークでのみ使用されます。これは、スイッチ/ルーターがパケットの送信先を知る方法です。IP は、ネットワークからネットワークへパケットを転送するために使用されます。

すべての TCP/UDP パケットには、送信者 IP と MAC が含まれます。このようにして、受信側デバイスは返品パッケージに MAC を含めることができるため、スイッチ/ルーターはそれをどこに配送するかを知ることができます。MAC アドレスは一意である必要がありますが、その保証はなく、インターネット上のデバイス アドレスとして使用することはできません。

インターネットを使用するときは、IP プロトコル (グローバル アドレス システム) を使用します。ローカル ネットワークでは、通常、デバイスは MAC アドレスを使用します。

于 2013-03-25T22:47:14.910 に答える
-1
 try{       

InetAddress ip = InetAddress.getLocalHost();
System.out.println("ip : " + ip);NetworkInterface network = NetworkInterface.getByInetAddress(ip);
byte[] mac = network.getHardwareAddress();
System.out.print("Current MAC address : ");
StringBuilder sb = new StringBuilder();
for (int i = 0; i < mac.length; i++) {
sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : ""));
}
System.out.println(sb.toString());
String s=sb.toString();System.out.println(s);
于 2015-02-11T11:18:38.150 に答える