Tcpdump源码分析系列4:main函数继续研究
2019独角兽企业重金招聘Python工程师标准>>>
革命尚未成功,同志仍需努力!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
switch (tflag)
{
case 0: /* Default */
case 4: /* Default + Date*/
thiszone = gmt2local(0);
break;
case 1: /* No time stamp */
case 2: /* Unix timeval style */
case 3: /* Microseconds since previous packet */
case 5: /* Microseconds since first packet */
break;
default: /* Not supported */
error("only -t, -tt, -ttt, -tttt and -ttttt are supported");
break;
}
//根据t的个数来设置tflag,然后决定是否需要设置thiszone值
~~~~~~~~~~~~
if (fflag != 0 && (VFileName != NULL || RFileName != NULL))
error("-f can not be used with -V or -r");
if (VFileName != NULL && RFileName != NULL)
error("-V and -r are mutually exclusive.");
//添加参数之间的有效性验证
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#ifdef WITH_CHROOT
/* if run as root, prepare for chrooting */
if (getuid() == 0 || geteuid() == 0)
{
/* future extensibility for cmd-line arguments */
if (!chroot_dir)
chroot_dir = WITH_CHROOT;
}
#endif
//chroot_dir设置为WITH_CHROOT
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#ifdef WITH_USER
/* if run as root, prepare for dropping root privileges */
if (getuid() == 0 || geteuid() == 0) {
/* Run with '-Z root' to restore old behaviour */
if (!username)
username = WITH_USER;
}
#endif
//设置username --->WITH_USER
//自定义检查点: 1 2 3
~~~~~~~~~~~~~~~~~~~~~~```
if (RFileName != NULL || VFileName != NULL)
{
//如果RFileName|VFileName至少存在一个
//这里我们假设是进行live capture
//则以下代码不执行
/*
* If RFileName is non-null, it's the pathname of a
* savefile to read. If VFileName is non-null, it's
* the pathname of a file containing a list of pathnames
* (one per line) of savefiles to read.
*
* In either case, we're reading a savefile, not doing
* a live capture.
*/
#ifndef WIN32
/*
* We don't need network access, so relinquish any set-UID
* or set-GID privileges we have (if any).
*
* We do *not* want set-UID privileges when opening a
* trace file, as that might let the user read other
* people's trace files (especially if we're set-UID
* root).
*/
if (setgid(getgid()) != 0 || setuid(getuid()) != 0 )
fprintf(stderr, "Warning: setgid/setuid failed !\n");
#endif /* WIN32 */
if (VFileName != NULL) {
if (VFileName[0] == '-' && VFileName[1] == '\0')
VFile = stdin;
else
VFile = fopen(VFileName, "r");
if (VFile == NULL)
error("Unable to open file: %s\n", strerror(errno));
ret = get_next_file(VFile, VFileLine);
if (!ret)
error("Nothing in %s\n", VFileName);
RFileName = VFileLine;
}
pd = pcap_open_offline(RFileName, ebuf);
if (pd == NULL)
error("%s", ebuf);
dlt = pcap_datalink(pd);
dlt_name = pcap_datalink_val_to_name(dlt);
if (dlt_name == NULL) {
fprintf(stderr, "reading from file %s, link-type %u\n",
RFileName, dlt);
} else {
fprintf(stderr,
"reading from file %s, link-type %s (%s)\n",
RFileName, dlt_name,
pcap_datalink_val_to_description(dlt));
}
localnet = 0;
netmask = 0;
}
转载于:https://my.oschina.net/qiangzigege/blog/171368
Tcpdump源码分析系列4:main函数继续研究相关推荐
- Tcpdump源码分析系列7:main函数
2019独角兽企业重金招聘Python工程师标准>>> #ifndef WIN32 /* * If a user name was specified with "- ...
- jQuery源码分析系列
声明:本文为原创文章,如需转载,请注明来源并保留原文链接Aaron,谢谢! 版本截止到2013.8.24 jQuery官方发布最新的的2.0.3为准 附上每一章的源码注释分析 :https://git ...
- [转]jQuery源码分析系列
文章转自:jQuery源码分析系列-Aaron 版本截止到2013.8.24 jQuery官方发布最新的的2.0.3为准 附上每一章的源码注释分析 :https://github.com/JsAaro ...
- k8s源码分析 pdf_Spark Kubernetes 的源码分析系列 - features
1 Overview features 包里的代码,主要是用于构建 Spark 在 K8S 中的各类资源所需要的特征,个人觉得可以理解成这些 features 就是帮你写各类 Kind 的 YAML ...
- [转载]jQuery1.6.1源码分析系列
转载:http://www.cnblogs.com/nuysoft/archive/2011/11/14/2248023.html [原创] jQuery1.6.1源码分析系列(停止更新) 作者:nu ...
- Spring源码分析系列——bean创建过程分析(三)——工厂方法创建bean
前言 spring创建bean的方式 测试代码准备 createBeanInstance()方法分析 instantiateUsingFactoryMethod()方法分析 总结 spring创建be ...
- vue源码分析系列二:$mount()和new Watcher()的执行过程
续vue源码分析系列一:new Vue的初始化过程 在initMixin()里面调用了$mount() if (vm.$options.el) {vm.$mount(vm.$options.el);/ ...
- Thinkphp源码分析系列–开篇
目前国内比较流行的php框架由thinkphp,yii,Zend Framework,CodeIgniter等.一直觉得自己在php方面还是一个小学生,只会用别人的框架,自己也没有写过,当然不是自己不 ...
- Tomcat8源码分析系列-spring boot集成tomcat
前言 本文基于 spring boot 1.5.9 spring boot 支持目前主流的 servlet 容器,包括 tomcat.jetty.undertow,可以在我们的项目中方便地集成这些 s ...
- Kylin源码分析系列三—rowKey编码
Kylin源码分析系列三-rowKey编码 注:Kylin源码分析系列基于Kylin的2.5.0版本的源码,其他版本可以类比. 1. 相关概念 前面介绍了Kylin中Cube构建的流程,但Cube数据 ...
最新文章
- linux 内核驱动模块的编译及加载
- 致传统企业朋友:不够痛就别微服务,有坑
- ML之catboost:基于自带Pool数据集实现二分类预测
- ExtJS MVC 学习手记3
- 检测Java Web应用程序而无需修改其源代码
- OD使用教程20 - 调试篇20
- 如何优化代码和RAM大小
- python密码登录程序三次_Python实现账号密码输错三次即锁定功能简单示例
- structs中国际化小结
- Java泛型(类、接口、方法)及通配符
- linux安全擦除ssd命令,如何在不破坏SSD的情况下安全擦除SSD | MOS86
- 【机器学习】K-means算法Python实现教程
- 马王堆汉墓帛书‧老子乙本——道经
- vc++加载透明png图片方法——GDI+和CImage两种
- 倪海厦《天纪》「自参」
- css 如何选择同一个class下的第一个div?
- 【观察】甲骨文数据库掌门人的“中国情缘”
- TypeScript泛型工具
- matlab矩阵除法、左除、求逆,这三者有什么区别
- 协方差,协方差矩阵,相关系数
热门文章
- kpconv与point transformer异同、算法讲解
- 关于项目部署到外网后,访问域名失败的原因之一
- 实习踩坑之路:Mybatis写的sql语句有<符号的问题导致项目启动失败以及count(*)怎么对应到某个实体类的字段
- Kubernetes学习笔记及重点知识解析
- Activity的Launch mode详解 singleTask正解
- linux删除文件密码不奏效,Linux运维知识之linux_无秘登录问题(不生效)
- 进击的 Flink:网易云音乐实时数仓建设实践
- linux的tar命令压缩26g文件,如何使用Linux上的tar命令压缩和解压缩文件 | MOS86
- android中的oom,Android OOM Adjustments
- vivado中交织模块_Adalm Pluto SDR主动学习模块让您拥有完善的无线电RF射频实验室...