2019年6月16日データリンク層を扱えるソケットを使って、受信したデータのEthernetヘッダを表示してみました。自分でEhternetフレームを定義する必要はなく、すでにライブラリに準備されています。Linuxの"net/ethernet.h"で定義されているEthernetヘッダは以下の通りです。((__packed__));コードは以下です。Ethernet以外にも各階層毎に様々なプロトコルがあります。それぞれに対応したコードをmain関数に詰め込むと大変なことになりますので、本当はEthernetヘッダを表示させるための機能をまとめた関数を別に定義させるべきです。今回は、Ethernetだけしか対応していないのでmain関数に詰め込みました。0;}socketの生成をしたら、recvで受信したデータをbufに格納します。データはchar型にただ詰め込まれただけなので、操作したいプロトコルに対応した型に変換してやる必要があります。上述したように、各型はlinuxで定義されています。あと、MACアドレスは、"〇:〇:〇:〇:〇:〇"の形で表示させるために、snprintfで文字列に変換してあげる必要がります。main関数とは別に変換のための関数が定義されています。このプログラムはenp0s8というインターフェースで動かしているので、enp0s8に向けて例えばpingを通せば、Ehternetヘッダが表示されます。インタフェース名を変えれば、そのインタフェース上で動かせます。最後まで読んでいただきありがとうございました。コメントをキャンセルメールアドレスが公開されることはありません。*サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。date*日本語が含まれない投稿は無視されますのでご注意ください。pingを受信し中身を表示してみたパケットキャプチャを作る際のテスト用として、pingの受信結果を簡単に表示するものです。IPv6を取得して標準出力させてみます。...【DHCP】Cでdiscoverを送信してみた今回はDHCPのdiscoverパケットを送信してみました。SocketでICMPパケットを扱ってみた!今回はICMPパケットに絞ってみていこうと思います。ICMPはタイプとコードの値を持っています。タイプによっては複数のコードを持つものもあります。pingを受信し中身を表示してみたプロフィール某名門大の大学院生です。IoT、人口知能、ネットワークインフラ系まで幅広く興味があります。いう方のために簡単にまとめてみました。IPv6を取得して標準出力させてみます。自分の目で調査したのでまとめます。変更までする方法をご紹介します。ioctlシステムコールを使います。フラグを引数に指定します。一度まとめておこうと思います。以下が思いつくかと思います。全て"stdio.h"に定義されています。