MasaのITC Life

夢は起業家!全てにおいて凡人だけど頑張ることだけはいっちょ前!

プログラミング

【パケットキャプチャ】Raw Socket でpingを受信し中身を表示してみた

投稿日:2019年6月5日 更新日:

パケットキャプチャを作る際のテスト用として、pingの受信結果を簡単に表示するものです。

まずはインクルードするもの

次に各プロトコルのヘッダーファイルを表示させるための関数です。pingで使うプロトコルと実際に通信するときに必要になるプロトコル(Ethernet・ARP・IP・ICMP)のみ対応しています。

IPパケットで表示するIPアドレスとARPパケットで表示するIPアドレスは、定義されているデータのサイズが異なるので、それぞれ違う関数で文字列に変換してあげます。struct iphdrを見るとIPアドレスは4バイトの変数に格納されています。一方で、struct ether_arpを見るとIPアドレスは1バイトの配列に格納されています。 MACアドレスは同じ関数で文字列変換できます。



基本的にはlinuxで定義されたヘッダの構造体のメンバを表示させるだけです。2バイト以上のデータを扱うときは、ネットワークバイトオーダにからホストバイトオーダに変換して表示させます。

main関数です。
受信したデータで使われているプロトコルによって、処理を分けていきます。受信したデータの先頭からデータを表示していきます。

 

実行したものがこちらです。

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

-プログラミング

Copyright© MasaのITC Life , 2023 All Rights Reserved Powered by STINGER.