Drkcore

27 12 2011 Linux Tweet

プログラムからデータリンク層を扱う

Unixネットワークプログラミング入門でTCPとUDPをあつかったので、その勢いでデータリンク層をあつかってみます。

ProductName ルーター自作でわかるパケットの流れ
小俣 光之
技術評論社 / 1974円 ( 2011-07-09 )


2章は基本。

TCP,UDPと同じようにsocketを使えばいい

soc = socket(PF_PACKET,SOCK_RAW,htons(ETH_P_IP)))

ちなみにTCPの場合はこんな感じ

soc = socket(AF_INET, SOCK_STREAM, 0))

続いてbind

sa.sll_family=PF_PACKET;
sa.sll_protocol=htons(ETH_P_IP);
sa.sll_ifindex = ifreq.ifr_ifindex;
bind(soc,(struct sockaddr *)&sa, sizeof(sa))

と、socをインターフェースに関連付ける

TCPの場合もbindでアドレスとポートに結びつける

me.sin_family = AF_INET;
me.sin_addr.s_addr = htonl(INADDR_ANY);
me.sin_port = htons(port);
bind(soc_waiting, (struct sockaddr *)&me, sizeof(me))

まだ2章までしか読んでいないが、3章でパケットキャプチャ、4章でブリッジ、5章でルータを書いていくという流れになっていて、楽しみ。

ちなみに初心者向けではなくて、著者の暗黙の前提のあたりは説明がさくっと省かれている。 Unixネットワークプログラミング入門を読んでなかったら速攻挫折してたと思う。

ちなみにサンプルコードはmacでは動かない。

About

  • もう5年目(wishlistありマス♡)
  • 最近はPythonとDeepLearning
  • 日本酒自粛中
  • ドラムンベースからミニマルまで
  • ポケモンGOゆるめ

Tag

Python Deep Learning javascript chemoinformatics Emacs sake and more...

Ad

© kzfm 2003-2021