>>1503 inpaku > 簡単なプログラミングから練習しているのですが、いき詰まりました。 ははぁ、「簡単なプログラミングから練習」で、いきなりデータリンク層ですか。 僕にはちょっと荷が重いなぁ。 確認ですが、非 TCP/UDP かつ 非 IP のデータを送りたいのですよね? UNIX Magazine 2000年7月号「BSD をハックする - 齊藤明紀」で、 - 非 IP のプロトコルを使うにはどうすればよいか - 送信する Ethernet パケットに含まれる MAC アドレスを自由に 設定することはできるか について、NetBSD での解説が書かれています。 また、「UNIX ネットワークプログラミング第2版 Vol.1」 http://X68000.startshop.co.jp/~68user/net/link-book.html#8 では、データリンクへのアクセス手法として、 - BSD の BPF (BSD Packet Filter) - SVR4 の DLPI (SVR4 Data Link Provider Interface) - Linux の SOCK_PACKET の3つがあげられています。どうやらここらへんは OS により API がまちまちらしいですね。実際、手元の FreeBSD 4.2-BETA では (PF|AF|SOCK)_PACKET という定数は定義されていません。 で、この本によると Linux の SOCK_PACKET を使うなら fd = socket(AF_INET, SOCK_PACKET, htons(ETH_P_ALL)); とすると、データリンクからすべてのフレームを受けとれる らしいです。 あと、tcpdump が使用している libpcap というライブラリが 上記3種の方法に対応しているようなので、参考になるかも しれません。 # libpcap は読み出ししかできませんが、送信に対応させるのは # それほど面倒ではないとか。 > IPアドレスでは、inet_ptonとかあったんですが、 > MACアドレスの場合もあるのですか?? BSD には libc に ether_aton とか ether_hostton てのがあります。 Linux はどうですか? くぅ、面白い話題だけど、調べるのに一杯一杯だ。 |