LoT ラブオーティー

非モテ男の、非モテ男による、【女の子にモテたい】非モテ男のためIT活用ブログ

スポンサーリンク

プログラミング

【C言語】UDPセグメント(HelloWorld!)をRawソケットで送信する!

更新日:


基本的には、TCP/UDPセグメントを

わざわざRawソケットを使う必要ありません。



SOCK_DGRAMを使った方が

コードもシンプルになりますし、

そっちの方が簡単です。



しかし時にはUDPセグメントをRawソケットから

送らなければならない場面に遭遇します。



例えば、DHCP(BOOTP)の

discoverを送信する時点ではまだ、

クライアントにはIPアドレスが

割り振られていません。



こういうときはRawソケットを作成して、

自分でフレームを組み立てて送信します。



ソースコードの流れはシンプルです。

まずはRaw Socketを用意します。



そしてインタフェース名から

自分のMACアドレスを取得して、

Ethernet、IP、UDPの各フィールドに

適切な値を入れて送信するだけです。




それではやってみましょう!


スポンサーリンク

UDPをRawソケットで送ってみよう



コードはこちらです。


読み込むライブラリ、UDPパケット、

チェックサム計算用の疑似ヘッダー

を定義しています。



ブロードキャストのアドレスなども

マクロで定義しています。



DHCPのDiscoverを想定して、

送信元IPアドレスや宛先IPアドレスを

設定してあります。



もしユニキャストしたい場合は、

任意に変更すれば指定した相手に届きます。




送信するためにソケットを用意する関数です。

Raw Socketを作成して、

それをインタフェースにBindしています。




IPヘッダとUDPヘッダの

チャックサムを計算する関数です。



指定したインターフェースの

MACアドレスを取得する関数です。



フレームを組み立てて、

送信まで行う関数です。



main関数です。プログラム実行時に、

インタフェースも一緒に指定します。

あとHello World!は、

ここで文字配列に入れています。

scanfなどで標準入力から読み込むのもありですね。




実行結果はこんな感じになります。



宛先が同一セグメント内への

ブロードキャストなので、

同一セグメントに所属している

他のPCでパケットキャプチャしてます。



しっかり送信されていました!


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


スポンサーリンク

-プログラミング

Copyright© LoT ラブオーティー , 2020 All Rights Reserved Powered by STINGER.