非モテ男の恋愛VPN

非モテ男の、非モテ男による、【女の子にモテたい】非モテ男のための、モテモテになるまで宣言書

スポンサーリンク

プログラミング

recvで受信しEthernetヘッダを表示してみた

更新日:

データリンク層を扱えるソケットを使って、受信したデータのEthernetヘッダを表示してみました。自分でEhternetフレームを定義する必要はなく、すでにライブラリに準備されています。


Linuxの"net/ethernet.h"で定義されているEthernetヘッダは以下の通りです。

コードは以下です。Ethernet以外にも各階層毎に様々なプロトコルがあります。なので、それぞれに対応したコードをmain関数に詰め込むと大変なことになりますので、本当はEthernetヘッダを表示させるための機能をまとめた関数を別に定義させるべきです。今回は、Ethernetだけしか対応していないのでmain関数に詰め込みました。

 

socketの生成をしたら、recvで受信したデータをbufに格納します。データはchar型にただ詰め込まれただけなので、操作したいプロトコルに対応した型に変換してやる必要があります。上述したように、各型はlinuxで定義されています。


あと、MACアドレスは、"〇:〇:〇:〇:〇:〇"の形で表示させるために、snprintfで文字列に変換してあげる必要がります。なのでmain関数とは別に変換のための関数が定義されています。


このプログラムはenp0s8というインターフェースで動かしているので、enp0s8に向けて例えばpingを通せば、Ehternetヘッダが表示されます。またインタフェース名を変えれば、そのインタフェース上で動かせます。



最後まで読んでいただきありがとうございました。

スポンサーリンク

-プログラミング

Copyright© 非モテ男の恋愛VPN , 2019 All Rights Reserved Powered by STINGER.