1. pluto中监听各个网口的500端口处理逻辑

  • whack_handle()

    • find_ifaces()

      • find_raw_ifaces4()

        • socket、setsockopt、bind、ioctl、

        • 通过ioctl(master_sock, SIOCGIFCONF, &ifconf)获取到所有的网络配置信息(网口名称和IP地址)

        • 通过ioctl(master_sock, SIOCGIFFLAGS, &auxinfo)获取网卡是否处于UP状态

        • 构建UP状态的<网口名,IP地址>链表,并返回此链表

        • 在获取网口IP时,只能获取到该网口下的IP地址信息:

          '''c
          
          struct raw_iface {
          ip_address addr; /*这里可以看出只能获取一个IP地址*/
          char name[IFNAMSIZ + 20]; /* what would be a safe size? */
          struct raw_iface *next;
          }; '''
      • find_raw_ifaces6()

        • 通过/proc/net/if_inet6文件来获取IPv6的网络接口
        • 获取网络接口IP并返回链表
      • process_raw_ifaces()

        • ipesc开始的接口直接跳过, 也就是说如果添加tunnel接口,这里需要确认下

        • mast开始的接口直接跳过

        • 遍历所有的接口,确保没有配置相同的接口IP地址

        • 创建监听的套接字(绑定500和4500端口

        • 接口采用的数据结构:

          struct iface {
          char *vname; /* virtual (ipsec) device name */
          char *rname; /* real device name */
          ip_address addr; /* interface IP address */
          u_int16_t port; /* host byte order */
          int fd; /* file descriptor of socket for IKE UDP messages */
          struct iface *next;
          #ifdef NAT_TRAVERSAL
          bool ike_float;
          #endif
          enum { IFN_ADD, IFN_KEEP, IFN_DELETE } change;
          };
    • 全局变量:interfaces通过上述流程后便构造成功,且获取到了接口的所有IP地址,然后通过链表连接起来

最新文章

  1. 创建自己的Vagrant box
  2. SharePoint 2013 用IE11在线打开Word文档报错
  3. winfrom程序如何做到快速关闭窗体
  4. 几个Jquery对话框插件
  5. coherence初识
  6. 关于ANSI 和 Unicode
  7. Flash,EEPROM差别
  8. 诡异的数学,数字问题 - leetcode
  9. 【JS】JavaScript中的参数传递
  10. window平台写的shell脚步在Linux不识别
  11. 【Linux】【MySQL】CentOS7安装最新版MySQL8.0.13(最新版MySQL从安装到运行)
  12. 解决vscode egg调试出现: this socket has been ended by other party【转】
  13. Linux修改MAC地址方法
  14. mongodb之 非正常关闭启动报错处理
  15. 微信小程序开发之获取用户手机号码——使用简单php接口demo进行加密数据解密
  16. linux 后台执行nohup 命令,终端断开无影响
  17. BZOJ 2200--[Usaco2011 Jan]道路和航线(最短路&amp;拓扑排序)
  18. 关于vue-eslint自动补全代码,以及自动生成雪碧图
  19. Phonegap 目录结构介绍
  20. JDK 9 &amp; JDK 10 新特性

热门文章

  1. 安卓安装https证书
  2. 3D网页小实验-基于多线程和精灵动画实现RTS式单位行为
  3. Android菜鸟进字节跳动,居然是看了这个......
  4. Android:Android Studio导入OpenCV(Android项目)
  5. Alibaba-技术专区-Dubbo3总体技术体系介绍及技术指南(目录)
  6. 课程设计-基于SSM的美容美发造型预约管理系统代码Java理发剪发设计造型系统vue美发店管理系统
  7. Golang语言系列-04-运算符
  8. Elasticsearch核心技术(二):Elasticsearch入门
  9. CMD直接输入Java,Javac,Javap发生乱码解决方式
  10. Data-truncation--Incorrect-string-value