用户态处理arp、ndisc neighbour solication 报文

问题背景:

  想要协议栈给不是接口ip的报文,ipv4回复arp request,ipv6回复 ndisc solication。

#include <stdio.h>

//调用该函数成为一个守护进程
void daemon(void)
{ return;
} /*ipv4*/
void parent(void)
{
//创建socket
socket(); while() {
recvfrom(); //正确性检查
write_log(); switch () {
default :
continue;
case :
;
} //判断是否在地址池中
if ()
continue; arp_reply(); } return;
} /*ipv6*/
void child(void)
{
//创建socket
socket(); while() {
recvfrom(); //正确性检查
write_log(); //判断协议类型,只处理ndisc ns报文
switch () {
default :
continue; //while cycle
case :
;
} if ()
continue; icmpv6_ndisc_ns();
} return;
} int main()
{
pid_t pid; daemon(); if (pid > ) {
parent();
} else if (pid == ){
child();
} else {
perror("fork error");
return -;
} return ; }

涉及技术:

  1.守护进程(apue中有通用code)

  2.raw socket抓包

  3.文件读写锁

  4.用户态回复数据包(参见arposion)

  5.写日志

 应用:

  1.可以使用这个程序导致同一局域网内pc ip地址冲突,因为是pc使用一个ip地址时候都会用arp、icmpv6做重复地址检测。进一步可以设定mac地址,从而实现局域网内的mac、ip地址绑定。

上一篇:JS把字符串转换为数字的方法


下一篇:ksoap2调用webservice传递参数丢失