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函数继续研究相关推荐

  1. Tcpdump源码分析系列7:main函数

    2019独角兽企业重金招聘Python工程师标准>>> #ifndef WIN32  /*   * If a user name was specified with "- ...

  2. jQuery源码分析系列

    声明:本文为原创文章,如需转载,请注明来源并保留原文链接Aaron,谢谢! 版本截止到2013.8.24 jQuery官方发布最新的的2.0.3为准 附上每一章的源码注释分析 :https://git ...

  3. [转]jQuery源码分析系列

    文章转自:jQuery源码分析系列-Aaron 版本截止到2013.8.24 jQuery官方发布最新的的2.0.3为准 附上每一章的源码注释分析 :https://github.com/JsAaro ...

  4. k8s源码分析 pdf_Spark Kubernetes 的源码分析系列 - features

    1 Overview features 包里的代码,主要是用于构建 Spark 在 K8S 中的各类资源所需要的特征,个人觉得可以理解成这些 features 就是帮你写各类 Kind 的 YAML ...

  5. [转载]jQuery1.6.1源码分析系列

    转载:http://www.cnblogs.com/nuysoft/archive/2011/11/14/2248023.html [原创] jQuery1.6.1源码分析系列(停止更新) 作者:nu ...

  6. Spring源码分析系列——bean创建过程分析(三)——工厂方法创建bean

    前言 spring创建bean的方式 测试代码准备 createBeanInstance()方法分析 instantiateUsingFactoryMethod()方法分析 总结 spring创建be ...

  7. vue源码分析系列二:$mount()和new Watcher()的执行过程

    续vue源码分析系列一:new Vue的初始化过程 在initMixin()里面调用了$mount() if (vm.$options.el) {vm.$mount(vm.$options.el);/ ...

  8. Thinkphp源码分析系列–开篇

    目前国内比较流行的php框架由thinkphp,yii,Zend Framework,CodeIgniter等.一直觉得自己在php方面还是一个小学生,只会用别人的框架,自己也没有写过,当然不是自己不 ...

  9. Tomcat8源码分析系列-spring boot集成tomcat

    前言 本文基于 spring boot 1.5.9 spring boot 支持目前主流的 servlet 容器,包括 tomcat.jetty.undertow,可以在我们的项目中方便地集成这些 s ...

  10. Kylin源码分析系列三—rowKey编码

    Kylin源码分析系列三-rowKey编码 注:Kylin源码分析系列基于Kylin的2.5.0版本的源码,其他版本可以类比. 1. 相关概念 前面介绍了Kylin中Cube构建的流程,但Cube数据 ...

最新文章

  1. linux 内核驱动模块的编译及加载
  2. 致传统企业朋友:不够痛就别微服务,有坑
  3. ML之catboost:基于自带Pool数据集实现二分类预测
  4. ExtJS MVC 学习手记3
  5. 检测Java Web应用程序而无需修改其源代码
  6. OD使用教程20 - 调试篇20
  7. 如何优化代码和RAM大小
  8. python密码登录程序三次_Python实现账号密码输错三次即锁定功能简单示例
  9. structs中国际化小结
  10. Java泛型(类、接口、方法)及通配符
  11. linux安全擦除ssd命令,如何在不破坏SSD的情况下安全擦除SSD | MOS86
  12. 【机器学习】K-means算法Python实现教程
  13. 马王堆汉墓帛书‧老子乙本——道经
  14. vc++加载透明png图片方法——GDI+和CImage两种
  15. 倪海厦《天纪》「自参」
  16. css 如何选择同一个class下的第一个div?
  17. 【观察】甲骨文数据库掌门人的“中国情缘”
  18. TypeScript泛型工具
  19. matlab矩阵除法、左除、求逆,这三者有什么区别
  20. 协方差,协方差矩阵,相关系数

热门文章

  1. kpconv与point transformer异同、算法讲解
  2. 关于项目部署到外网后,访问域名失败的原因之一
  3. 实习踩坑之路:Mybatis写的sql语句有<符号的问题导致项目启动失败以及count(*)怎么对应到某个实体类的字段
  4. Kubernetes学习笔记及重点知识解析
  5. Activity的Launch mode详解 singleTask正解
  6. linux删除文件密码不奏效,Linux运维知识之linux_无秘登录问题(不生效)
  7. 进击的 Flink:网易云音乐实时数仓建设实践
  8. linux的tar命令压缩26g文件,如何使用Linux上的tar命令压缩和解压缩文件 | MOS86
  9. android中的oom,Android OOM Adjustments
  10. vivado中交织模块_Adalm Pluto SDR主动学习模块让您拥有完善的无线电RF射频实验室...