[LINUX] [NETWORK] SOCK_PACKET ?
linux 2.4(test-?)でtcpdumpなどを使っていると
tcpdump uses obsolete (PF_INET,SOCK_PACKET)
なんてログが残ります。 で調べてみると
/* Compatibility.
This uglymoron is moved from INET layer to here to avoid
deadlock in module load.
*/
if (family == PF_INET && type == SOCK_PACKET) {
static int warned;
if (!warned) {
warned = 1;
printk(KERN_INFO "%s uses obsolete (PF_INET,SOCK_PACKET)\n", current->comm);
}
family = PF_PACKET;
}
なんてのが linux/net/socket.c にありました。じゃどうすれば良いのかというとsocket(2)を調べてみるとやはりここにも、
SOCK_PACKET は 廃止されており新しいプログラムで使用してはいけない。
という記述がありました。そこでsocket(7)を調べてみると、
socket(PF_PACKET, SOCK_RAW, protocol);
みたいにすれば良いとのこと(完全互換ではない)。また、
移植性の必要なプログラムでは pcap(3) で PF_PACKET を用いる
ほうが良い。ただしこの方法では PF_PACKET の機能すべてを 利
用することはできない。
とありました。
0 件のコメント:
コメントを投稿