none
イーサネットフレームでの送受信 RRS feed

  • 質問

  • お世話になります。

    Visal Studio2010にてアプリケーション開発を行っております。

    現在、以下のようなコードでイーサネットフレームのデータ送信を行おうとしているのですが、

    このコードでは_socket.Sendの部分でエラーコード 10057のSocketExceptionが発生しております。

    ---------------------------------------

                // ソケット設定
                _socket = new Socket(AddressFamily.Unspecified, SocketType.Raw, ProtocolType.Raw);

                // NICの選択
                _socket.Bind(new IPEndPoint(ipAddr, 60));

                // データ送信
                _socket.Send(networkScanData);

                // ソケットの終了
                _socket.Close();
    ---------------------------------------------

    通常のソケットであれば、Connectといった処理が入るのは分かるのですが

    それを無視した形で送受信というのは行えないものなのでしょうか?

    送信したいデータというのが、ある通信規格のデータとなっており、

    特定のMACアドレス宛にデータを送信することで機器が応答を返すといったものになっております。

    質問の仕方など、不適切な部分などあるかと思いますがご教授お願いいたします。

    また、不足している部分などもございましたらご指摘お願いいたします。

    2015年1月6日 4:14

回答

すべての返信

  • 試したりはしていませんが、実行に管理者権限が必要なのではないでしょうか ?
    2015年1月6日 4:59
  • 基にされているC言語(たぶんUNIX系?)でのソースがあればそれも併せていただけたらと思います。

    10057はWSAENOTCONNでconnect()していないから当然といえば当然ですが、C言語ではconnect()せずにsend()に成功しているのでしょうか? ともあれ、socket()、bind()、send()等にどのような引数を与えることを期待しているかが明確になれば、C#での記述も明確になります。

    2015年1月6日 5:42
  • C#は素人同然ですが、
    コネクションレスを試してみてはどうでしょう。
    つまりSendTo()ですね。
    2015年1月6日 5:44
  • 仲澤様

    SendToを使用する場合、第2引数にIPEndPointを指定して

    接続先IPアドレスとポート番号を指定することになりませんでしょうか?

    2015年1月6日 6:03
  • 佐祐理様

    http://kirihari.net/program/L2Forwarder.html

    のコードなどを参考にはしております。

    2015年1月6日 6:15
  • しらちゃ様

    Visual Studioを管理者として実行しておりますので、

    管理者権限によるExceptionは回避できております。

    2015年1月6日 6:16
  • SendToが要求するのはEndPointであってIPEndPointではないので、適切なEndPoint派生クラスを実装すれば良いんではないでしょうか。

    // 私はやったこと無いですけど。

    2015年1月6日 6:22
  • 文面からは特定のハードを想定してしまいましたが、
    そうでない場合は、ブロードキャストの一択になると思うのですが、どうでしょう。

    2015年1月6日 6:28
  • 挙げられましたURLではsocket()関数を

    socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL))

    のように呼び出していますが、Winsock(のヘッダーファイル)にはそもそもPF_PACKETが存在しません。前回も挙げましたがTCP/IP Raw Socketsの制限に引っかかっているかなと思います。SOでWinPcapを使ってみては、というやり取りを見つけました。

    • 回答としてマーク Setsuka 2015年1月15日 10:24
    2015年1月6日 6:35
  • コメントいただきました皆様

    やはり外部に頼るしか手がないようですね。

    佐祐理様が提示して下さりましたWinPcapでの実装に挑戦してみます。

    2015年1月6日 9:13