jpcapAPIでのMACアドレスの取り扱いについて

このQ&Aのポイント
  • jpcapAPIを使用して自作フレームを送信する際に、MACアドレスの取り扱いに困っています。
  • EthernetPacketクラスのフィールドには、送信先MACアドレスと送信元MACアドレスが格納される変数があります。
  • しかし、getDestinationAddress()メソッドを使用して表示すると、おかしな文字列が表示されてしまいます。
回答を見る
  • ベストアンサー

★jpcapAPIでのMACアドレスの取り扱いについて★

はじめまして。 現在jpcapというフレーム送受信用のフリーのAPIを使用して自作フレームを送信するプログラムを作成中です。 そこで困ったことがありまして、 EthernetPacketクラスのフィールドに public byte[] dst_mac ・・・送信先MACアドレス public byte[] src_mac ・・・送信元MACアドレス というMACアドレスを格納する変数があります。 MACアドレスは普通 00:01:00:08:00:0A のように4ビットずつを16進数にして8byteずつコロンで 区切る表示されますので、 dst_mac = "00010008000A".getBytes(); としてEthernetPacketクラスの送信先MACアドレス文字列を返しますメソッドである java.lang.String getDestinationAddress() を使用して表示させるとなんだかおかしな文字列が 表示されます。 byteについてまだ分からないことが沢山あり、 皆さんのご指導の程よろしくお願いいたします。 続きでそのEthernetPacketクラスのソースコード抜粋を 致します。 以上

  • Java
  • 回答数1
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
  • nakashi
  • ベストアンサー率51% (21/41)
回答No.1

http://www.goto.info.waseda.ac.jp/~fujii/jpcap/doc_ja/index.html を見ると >public byte[] dst_mac >宛先MACアドレス(6byte) とあるので MACアドレス00:01:00:08:00:0Aの場合は dst_mac[0]=0x00; dst_mac[1]=0x01; dst_mac[2]=0x00; dst_mac[3]=0x08; dst_mac[4]=0x00; dst_mac[5]=0x0a; と設定する仕様とおもわれる

oid7023
質問者

補足

ご回答ありがとうございます。わかりにくい質問にもかかわらず、APIドキュメントまで調べていただいて、感謝します。 ところでご回答にあるように dst_mac[0]=0x00; dst_mac[1]=0x01; dst_mac[2]=0x00; dst_mac[3]=0x08; dst_mac[4]=0x00; dst_mac[5]=0x0a; を行ったところうまくデータリンク層を設定したフレームを送信することができました。 ただMACアドレスが5fとかe0とかb5とかだとコンパイルエラー(検出値int 期待値byte)となるので dst_mac[5]=(byte)(0xB5)としています。 最後に質問のMACアドレスは8byteずつコロンで区切るは 間違いで1バイトずつコロンもしくはハイフンで区切るが 正解です。訂正いたします。 ありがとうございました。 以上

関連するQ&A

  • MACアドレスとIPアドレス

    はじめまして。 MACアドレスとIPアドレスの違いについて教えて下さい。 1 MACアドレスだけでもいいのでは? 2 IPアドレスだけでもいいのでは? フレームにはレイヤ2とレイヤ3のアドレスがそれぞれ入っていますが、 片方しかなくてもいいのでは?と思います。 それに対してどうでしょうか?

  • MACアドレスチェンジャーによるMACアドレス変更

    エレコム社が提供するMACアドレスチェンジャーを使うと、エレコム社のDST-C17SVなどのドッキングステーションのマックアドレスをPCのものに変更することで、接続できるMACアドレスが制限されたネットワークに接続できると思います。 会社のPCにドッキングステーションDST-C17SVを使用して、ドッキングステーションのMACアドレスをPCのものに変更した上で、社内LANに接続したいです。 ドッキングステーションのMACアドレスの変更を別のPCで実施した上で、MACアドレスチェンジャーがインストールされていないPCにドッキングステーションを接続した場合、MACアドレスの変更は維持されるでしょうか? 会社のPCは許可されたソフトウェア以外はインストールできないため、MACアドレスチェンジャーをインストールすることができません。このため、事前に私用PCでドッキングステーションのMACアドレスを会社のPCのものに変更したいと思っています。 ※OKWAVEより補足:「エレコム株式会社の製品」についての質問です。

  • WAN技術のカプセル化について(MACアドレス)

    ネットワークの初歩的な質問で恐縮ですが、自分自身調べた結果、納得のいく回答が得られなかった為、ご教授下さい。 LAN(イーサネット)では、IPアドレスと、MACアドレスを使用して、同じLAN(イーサネット)上の端末等と通信しており、その仕組みも理解できているのですが、WANを経由して、とあるLAN(イーサネット)上の端末Aが、他の拠点のLAN(イーサネット)上の端末B等と通信する場合に、MACアドレスは、使用されているのでしょうか。 (端末Aと、端末BのLANセグメントは、別セグメントとする) 端末Aは、まず、宛先IPアドレスに、端末BのIPアドレスを、宛先MACアドレスにGW(ルータ)のMACアドレスをセットしたフレームをGWに対して送信するのは、理解していますが、その後のGW(ルータ)は、WANのデータリンク層のプロトコルで、再度IPパケットをカプセル化するという認識でよいのでしょうか。 (端末Aから送信されたイーサネットのフレームを受信したGWは、IPパケットの宛先IPアドレスを確認し、ルーティングテーブルを参照する。その後、ルーティングテーブルの結果により、送信先interfaceを決定し、送信先interfaceに設定されているWANのカプセル化方式に基づき、IPパケットをイーサネットではない、WANのデータリンク層のプロトコルで再度カプセル化する。) ↑の認識であってますでしょうか。今回のWANとは、広域イーサネットではない、専用線や、ISDN、フレームリレーを想定した場合です。 とにかく、ルータからWAN側に送信されるフレームには、MACアドレスが含まれていないかどうかが、知りたいです。 MACアドレスは、イーサネットで用いられるものだと理解しております。PPPやHDLC等のプロトコルを用いて、WANのルータ同士を専用線等で、接続している場合、ルータ同士は、ARPでMACアドレスを解決する事もないのですよね? イーサネットフレームが、PPPやHDLCのフレームに置き換わっているイメージでしょうか。 大変、わかりにくい文章で恐縮ですが、どなたか、ご教授下さい。

  • 送信元のIPアドレスとMACアドレスについて

    送信先IPアドレスとMACアドレスが必要なのはわかるのですが、送信元のIPアドレスとMACアドレスがなぜ必要なのでしょうか?

  • IPアドレスとMACアドレス

    異なるネットワーク間でデータが、ホスト→ハブ→ルータ→ルータ→ハブ→ホストと流れるとき、それぞれの区間ではIPアドレスとMACアドレスのどちらを元にデータを送ってるのでしょうか? また、送信先のMACアドレスはどうやって知るのでしょうか?

  • ルータのMACアドレスについて

    よろしくお願いいたします。 初心者的な質問ですが お付き合い願えたら幸いです。 実は、ネットワークの勉強でARPのところで 疑問が湧きました。 パケットがルータを通過していく際に ヘッダーのMACアドレスが書き換わっていくのは わかりましたが、 ルータのMACアドレスは各ポートに着いているのでしょうか? テキストの図を見るとルータにはMACアドレスがひとつしかないように かかれているので疑問に思いましたので 質問いたしました。 おひまなときで結構ですので アドバイスどうぞよろしくお願いいたします。 図:コンピュータAからルータBとCと通って、コンピュータDに データが届く図です。※アルファベットはMACアドレスです。 コンピュータA⇒ルータB⇒ルータC⇒コンピュータD パケット |データ|MAC A→B| ⇒|データ|MAC B→C| ⇒|データ|MAC C→D|

  • MACのMACアドレス

    MACをLANの中で管理するのに、MACに入っているLANカードのMACアドレスを調べたいのですが、どうしたら表示されるか、ご存知の方いらっしゃいませんか?当方、極めてMAC初心者ですので、初歩から教えていただけると非常に助かります。

    • ベストアンサー
    • Mac
  • ルーター配下のパソコンとネット上のサーバとの通信

    ルーターにはLANポートが複数ありそれぞれのLANポートにパソコンをつないでいます。 そのポートの1つである LANポート1につないでいるパソコンA(192.168.100.2/24)から デフォルトゲートウェイである ルーター(192.168.100.1)を経由して あるサーバー(74.125.235.95)にパケットを送り 戻りパケットがルーターからパソコンAに届くまで  について。 ルーターのIPマスカレードは  内側 192.168.100.2:4415 あて先 74.125.235.95:80 とします。 ○パソコンAからルーターまで 接続先が 192.168.100.0/24 のネットワークと異なる 74.125.235.95であることから パソコンAはデフォルトゲートウェイにパケットを送ろうとし パソコンAのデフォルトゲートウェイのIPアドレスをARPテーブルから割り出し 次にそのIPアドレスに基づいてARPテーブルからデフォルトゲートウェイのMACアドレスを割り出し そのMACアドレスを含んだMACフレームを送信する。 ルーターはMACフレーム内の送信先MACアドレスがルーター自身のMACアドレスであることから 自身で担当すべきMACフレームであると判断し、そのフレームの処理を引き受ける。 ○ルーターからパソコンAまで サーバーから戻りパケットを受け取ったルーターは、IPマスカレードに基づいて ルーターからそのパケットを送信すべき送信先のIPアドレスを 192.168.100.2 と判定する。 次に IPアドレス 192.168.100.2 に基づいてルーターのARPテーブルから MACアドレスを割り出す。 次に、そのMACアドレスに基づいて MACアドレステーブルから 送出先ポートであるLANポート1 を割り出し、LANポート1からパケットを送りだす。 ○パソコンAからルーターまで ○ルーターからパソコンAまで は上記の理解で合っていますでしょうか? 特に気になるのは、○ルーターからパソコンAまで において 送出先ポートを最終的に決めるのは IPアドレスではなく、 MACアドレステーブルが参照され、結果 MACアドレステーブルのMACアドレスによって決まるのかどうか という点です。

  • String型をbyte型へ

    MACアドレス(16進数) 00:00:00:00:00:01 これが引数で指定される。 String str = args[0]; というものがありまして(String型)、 そのコロン:で分けられた数字部分のみをバイト配列に格納したいのですが、そのうまい方法がわかりません。お助けください。 byte mac_addr[0] = Byte.parseByte("0x".concat(str.substring(0,1))); なんて事もしてみましたが、NumberForamtExceptionが 表示されます。(コンパイルは出来る。) うむ、分からない。どこが悪いのだろう??? 以上

    • ベストアンサー
    • Java
  • 異なるネットワークアドレスについて

    例えば以下のような構成を考えます。 PC-----ルーター-----インターネット PCのIPアドレス 192.168.0.100 PCのMACアドレス AAA(簡単に) ルータのIPアドレス 192.168.0.1 ルータのMACアドレス BBB(簡単に) ここでPCから100.100.100.100というIPアドレスに ping通信をしたとします(別にhttpdでもftpでもいいです。)そして応答が返ってきた場合の応答パケット内の送信先、送信元のIPとMACは以下のようになっています。 送信先IP 192.168.0.100(PCの) 送信先MAC AAA(PCの) 送信元IP 100.100.100.100(ping対象の) 送信元MAC BBB(ルーターの) 上記では送信先IPと送信元IPのネットワークアドレスは異なります。ネットワークアドレスが異なれば通信はできないはずです。具体的にはネットワークアドレスの異なるパケットを受信した場合はPCは破棄するはずです。しかし実際には上記のような場合でもpingは通ります。 これはどういうしくみ(決まり)で動作しているのでしょうか? ご教授よろしくお願いします。  

専門家に質問してみよう