各メンバを見ればわかる通り、物理インターフェースを表現できる構造になっています。sll_addr[8];};ソケットにバインドするデータは、以下の形で準備します。した文字列もしくはAddrinfoオブジェクトを指定します。https://docs.ruby-lang.org/ja/latest/method/Socket/i/bind.html実際のデータを構成する部分は以下のようにしてみました。各項目を型に合わせてArray#packして準備します。つなぎ合わせたものを準備します。このsendの引数も構造体をpackした文字列を準備しますので、上記「ソケットのバインド」で見たように対象の構造体に合わせてデータをpackした文字列をつなぎ合わせます。方は以下のように構成しました。送信データはネットワークバイトオーダー(ビッグエンディアン)になることに注意します。ether_typeendhttps://github.com/kuredev/simple_arp/blob/9bb0809de2d8fd3c481be36a6fd41bb257ac7543/lib/simple_arp/ether_header.rb#L15-L21データ送信時の第3引数ところでRubyのBasicSocket#sendは第3引数を取ることが出来ます。送信することと同様になるようです。されているときに使用可能、といった説明を見ます。問題無く動作しました。ちなみに第3引数を入れて、sendtoで送ったときも同様に送信できることを確認しました。動作的な違いは無いようでしたが、どちらがベター等あるのかはよく分かりません。SimpleARP::SockAddressLL.new(@src_if_name).to_pack_to)https://github.com/kuredev/simple_arp/blob/9bb0809de2d8fd3c481be36a6fd41bb257ac7543/lib/simple_arp/client.rb#L31SOCK_DGRAM以下のようにソケットを準備します。1544)endRAWソケットとの違いは、データ送信時のデータにイーサヘッダが不要なことです。送信していましたが、SOCK_DGRAMのときはそれを外しています。kure興味:Ruby/AWS/ネットワーク/バックエンドもろもろバッジを贈って著者を応援しようバッジを受け取った著者にはZennから現金やAmazonギフト券が還元されます。実装メモソケットの準備ソケットのバインド送信データの準備データ送信時の第3引数SOCK_DGRAM参考Zennエンジニアのための情報共有コミュニティAboutZennについて運営会社お知らせ・リリースGuides使い方Publicationよくある質問LinksTwitterGitHubメディアキットLegal利用規約プライバシーポリシ。