linux tcpdump 源码下载,Tcpdump源码分析系列6: main函数研究

这段代码主要涉及网络数据包捕获的实现,使用了pcap_open_live函数打开设备并设置捕获参数。它还设置了用户ID和组ID,并根据条件设置了内核缓冲区大小。此外,代码中进行了过滤表达式的编译,用于过滤捕获的数据包,并初始化相关功能。如果遇到错误或警告,程序会进行相应的处理。
摘要由CSDN通过智能技术生成

*ebuf = '\0';

pd = pcap_open_live(device, snaplen, !pflag, 1000, ebuf);

if (pd == NULL)

error("%s", ebuf);

else if (*ebuf)

warning("%s", ebuf);

#endif /* HAVE_PCAP_CREATE */

//如果没有定义HAVE_PCAP_CREATE,

//则通过pcap_open_live 获得用于捕获网络数据包的数据包捕获描述字

、、~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /*

* Let user own process after socket has been opened.

*/

#ifndef WIN32

if (setgid(getgid()) != 0 || setuid(getuid()) != 0)

fprintf(stderr, "Warning: setgid/setuid failed !\n");

#endif /* WIN32 */

//设置用户ID和组ID

//~~~~~~~~~~~~~~~~~~~~~~~~~~~

#if !defined(HAVE_PCAP_CREATE) && defined(WIN32)

if(Bflag != 0)

if(pcap_setbuff(pd, Bflag)==-1)

{

error("%s", pcap_geterr(pd));

}

#endif /* !defined(HAVE_PCAP_CREATE) && defined(WIN32) */

//设置内核缓冲区

//自定义检查点: 1 2 3

、、~~~~~~~~~~~~~~~~~~~~~~~~~~

i = pcap_snapshot(pd);

if (snaplen < i)

{

warning("snaplen raised from %d to %d", snaplen, i);

snaplen = i;

}

//返回快照长度,并与snaplen比较

、、~~~~~~~~~~

if (pcap_lookupnet(device, &localnet, &netmask, ebuf) < 0)

{

localnet = 0;

netmask = 0;

warning("%s", ebuf);

}

//获取网卡的配置信息

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`

if (infile)

cmdbuf = read_infile(infile);

else

cmdbuf = copy_argv(&argv[optind]);

//这里假设我们没有读取文件

//设置cmdbuf指向缓冲区

//自定义检查点: 1 2 3

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

if (pcap_compile(pd, &fcode, cmdbuf, Oflag, netmask) < 0)

error("%s", pcap_geterr(pd));

//设置过滤条件

/

init_addrtoname(localnet, netmask);

init_checksum();

//做一些初始化操作

#ifndef WIN32

(void)setsignal(SIGPIPE, cleanup);

(void)setsignal(SIGTERM, cleanup);

(void)setsignal(SIGINT, cleanup);

#endif /* WIN32 */

//设置一些信号处理函数句柄

#if defined(HAVE_FORK) || defined(HAVE_VFORK)

(void)setsignal(SIGCHLD, child_cleanup);

#endif

/* Cooperate with nohup(1) */

//设置一些信号处理函数句柄

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值