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地址,然后通过链表连接起来

pluto中监听各个网口的500端口处理逻辑的更多相关文章

  1. Vue 为什么在 HTML 中监听事件?

    为什么在 HTML 中监听事件? 你可能注意到这种事件监听的方式违背了关注点分离(separation of concern)传统理念.不必担心,因为所有的 Vue.js 事件处理方法和表达式都严格绑 ...

  2. 在Javascript中监听flash事件(转)

    在Javascript中监听flash事件,其实有两种做法: 1.在特定的环境下(例如专门制作的flash),大家约定一个全局函数,然后在flash的事件中用ExternalInterface.cal ...

  3. Fragment中监听onKey事件,没你想象的那么难。

    项目中越来越多的用到Fragment,在用Fragment取代TabHost的时候遇到了一个问题,我们都知道,TabHost的Tab为Activity实例,有OnKey事件,但是Fragment中没有 ...

  4. wemall app商城源码Fragment中监听onKey事件

    wemall-mobile是基于WeMall的android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改.本文分享android开发Fragment中监听onK ...

  5. 在Activity,Service,Window中监听Home键和返回键的一些思考,如何把事件传递出来的做法!

    在Activity,Service,Window中监听Home键和返回键的一些思考,如何把事件传递出来的做法! 其实像按键的监听,我相信很多人都很熟练了,我肯定也不会说这些基础的东西,所以,前期,还是 ...

  6. vue mounted中监听div的变化

    vue mounted中监听div的变化 <div style="width:200px;height:30px;background: #0e90d2" id=" ...

  7. 小程序中监听textarea或者input输入的值动态改变data中数组的对象的值

    Page({ data: { todoLists:[ { detail:"", date:"", location:"", priority ...

  8. Android 监听 Android中监听系统网络连接打开或者关闭的实现代码

    本篇文章对Android中监听系统网络连接打开或者关闭的实现用实例进行了介绍.需要的朋友参考下 很简单,所以直接看代码 复制代码 代码如下: package xxx; import android.c ...

  9. Android-服务中监听电源键和Home键的广播、在锁屏下仍然工作的方法

    Android-服务中监听电源键和Home键的广播  http://blog.csdn.net/u014657752/article/details/49512485 Android开发之如何监听让服 ...

随机推荐

  1. vue 子目录配置,负载均衡 nginx

    1. 我使用的是,腾讯云做负载均衡. 负载均衡配置: https://www.xxxx.com/vue   域名指向的服务器地址:10.10.10.10:80/vue 2. nginx 配置: ser ...

  2. 在线文本的编辑框——kindeditor富文本编辑的使用

    .personSunflowerP { background: rgba(51, 153, 0, 0.66); border-bottom: 1px solid rgba(0, 102, 0, 1); ...

  3. thunderbird发送纯文本邮件

    向邮件列表中发邮件时,要求邮件格式必须是纯文本格式的,在thunderbird中,邮件格式(plain text或者html格式)在[工具->账户设置->[账户名称]->通讯录]下的 ...

  4. SQL语法 - SELECT 语句

    SELECT 语句用于从数据库中选取数据. SQL SELECT 语句 SELECT 语句用于从数据库中选取数据. 结果被存储在一个结果表中,称为结果集. SQL SELECT 语法 SELECT c ...

  5. Razor Pages

    学习Razor Pages笔记 学习内容:https://learnrazorpages.com Razor页面都是以.cshtml结尾,其中内容页面必须具有以下三个特征: 1,文件名首位不能是下划线 ...

  6. noip模拟45[真是啥也不会]

    noip模拟45 solutions 真是一个题都不会了,然而考完试之后我在10min之内切掉了最后一个题 话说这是为什么呢, 因为最后一个是回滚莫队的大板子,然而我忘记了,不不不,是没有记起来过 T ...

  7. Do you want to continue? [Y/n] Abort.

    当出现这个后命令终止,无法选择 y这时候 ,在输入命令时候提前加入 -y udo apt install sysv-rc-conf -y

  8. NOIP 模拟 $24\; \rm block$

    题解 \(by\;zj\varphi\) 因为它要求大于它的且放在它前的数的个数要小于它的 \(key\) 值,所以先按 \(\rm val\) 值排序,然后按 \(\rm key\) 值排序,按顺序 ...

  9. Docker运行中文版GitLab

    docker-compose.yml version: '3' services: web: image: 'twang2218/gitlab-ce-zh:10.5' restart: always ...

  10. C#基础知识---迭代器与Foreach语句

    一.Foreach语句简介 在C# 1.0中我们经常使用foreach来遍历一个集合中的元素,然而如果一个集合要支持使用foreach语句来进行遍历,这个集合一般需要IEnumerable或IEnum ...