openswan pluto代码分析--(1)pluto简介

2023-11-19

                                                                                             pluto简介

pluto是一个openswan中的守护进程,提供IKEv1服务

Pluto通信消息:网卡数据报文消息;whack命令的消息;内核通信消息

接下来分别介绍上面三种通信消息

1. 网卡数据报文消息

打开UDP5004500端口监听网卡数据----什么时机可以创建这个socket还没看出来

call_server中遍历所有网卡检查是否可读

 

代码:

call_server()中遍历所有网卡检查是否可读

   -> comm_handle (const structiface_port *ifp)

      -> read_packet(structmsg_digest *md) 读取socket的报文数据

      -> process_packet (struct msg_digest **mdp)处理报文


2.whack命令的消息

pluto的主函数中创建UNIX域套接口ctl_fd,接下来在call_server函数监听ctl_fd读取

whack的输入;whack是控制程序,通过UNIX域套接口和pluto通信

 

代码:

call_server()检查ctl_fd是否可读

  ->whack_handle(int whackctlfd)处理whack命令入口

     ->whack_process(int whackfd, structwhack_message msg)处理whack消息


3. 内核通信消息

和内核进行PFKEY/netlink通信

call_server监听PFKEY对应的socket


call_server()监听和内核通信socket pfkeyfd

    ->pfkey_dequeue()

    ->pfkey_async()进行异步消息处理,遍历pfkey_iq_head链表中消息进行处理

         ->pfkey_msg_parse()消息解析,如果解析失败不进行后续处理

         ->消息类型检查buf->msg.sadb_msg_type

             K_SADB_REGISTER调用klips_pfkey_register向内核注册协议

             K_SADB_ACQUIRE调用process_pfkey_acquire

             K_SADB_X_NAT_T_NEW_MAPPING调用process_pfkey_nat_t_new_mapping将映射信息存入plutostatetable

   ->select()检查是否消息,如果返回值为-1, 则循环检查,否则跳出循环进行后续消息处理

   ->pfkey_event() 处理select获取pfkeyfd的可读消息,

       ->read()读取消息

       ->pfkey_async()处理来自内核的异步消息


未完待续...

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

openswan pluto代码分析--(1)pluto简介 的相关文章

  • IPSEC流程例子及两个阶段的协商过程详细介绍

    IPSEC VPN两个阶段的协商过程详细介绍 IPSec体系结构模型图 我们来看一个完整的IPSec体系结构模型图 以便更好地理解IPSec体系结构 IPSec流程图 SAKMP IKE第一阶段称为ISAKMP IKE的管理连接阶段 使用双
  • 如何在 Ubuntu 18.04、16.04 上安装和配置 OpenVPN 服务器

    VPN 或虚拟专用网络是一组通过公共网络 Internet 连接到专用网络的计算机 如今 安全性是每个人最关心的问题 在公共网络上工作时更需要安全性 就像您在远程位置有一组计算机一样 现在您需要将这些计算机作为系统中的 LAN 网络进行访问
  • 老年人教程,使用N2N进行异地组网

    一 简介 1 为什么用N2N 在一般情况下 两台机器如果是处在同一个局域网下 那么这两台机器可以通过各自的内网IP进行通信 但是 在某些情况下你可能希望两个不同局域网的机器进行通信 此时 N2N 就能给我们带来一个简单快捷的解决方案 N2N
  • 一键设置L2TP脚本-Ubuntu14.04LTS

    亲测在Vultr和UltraVPS的Ubuntu 14 04 LTS成功搭建L2TP的VPN 本方法使用Linux自带的账户认证作为L2TP的认证 用户名默认为vpn user 密码在脚本执行过程中 由执行者手动设定密码 PSK为psk 开
  • 如何从 iOS 应用程序打开 VPN? (私有 API 可以)

    不幸的是 当 iOS 设备进入 睡眠模式 时 即使已配置的 VPN 也会被关闭 一位客户想要为他的 iPad 安装应用程序has使用VPN是为了安全 所以任何事情都必须通过VPN来完成 该应用程序必须进行大量同步 但 iOS 设备可能会自行
  • 在 Android 上以编程方式设置 VPN

    我找到了以下代码以编程方式建立新的 VPN 但我不知道如何使用它来创建我的应用程序 VpnService service context getSystemService VPN SERVICE VpnProfile profile Vpn
  • Maven Mirror - 如果镜像主机不可用,如何绕过?

    我有一个 Maven 镜像存储库 Archiva 例如
  • 从 Java 应用程序启动 OpenVPN [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 是否可以通过 Java 应用程序启动 OpenVPN 如果可能的话 最好的方法是什么 这样它是跨平台的 并且可以在所有安装了 OpenVPN 的平台上运行 你可以像这样用 Jav
  • 用 C# 创建 VPN 客户端 [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我一直在研究不同的 VPN 它们似乎没有很好的加密 如默认的 Windows XP VPN 服务器 我想看看是否可以使用 C 创建自己的 但我不知道如何创建一个客户端来拦截所有数
  • 使用 C# 以编程方式更改 ipsec 规则的方法?

    我知道如何执行 IPsec 更改的唯一方法是调用 netsh 来进行更改 有没有直接使用 System Management 和 WMI 对象的方法 如果是这样 那是什么 我很难通过 MSDN 找到相关的 WMI 信息 或者有人使用过其他有
  • An Illustrated Guide to IPsec

    An Illustrated Guide to IPsec IPsec is a suite of protocols for securing network connections but the details and many va
  • 以编程方式原生 Android VPN

    这个问题存在变体 但我似乎无法理解某些东西 如果您阅读了功能末尾的内容工业控制系统 4 0 http developer android com about versions android 4 0 highlights html 其中提到
  • Docker Desktop Windows 和 VPN - 容器内没有网络连接

    我尝试在连接到 VPN 的同时在 Windows 上使用 Docker 当 VPN 未连接时 一切正常 但是 当我使用 Cisco AnyConnect 客户端连接到我们的企业 VPN 时 docker 容器内的网络不再工作 docker
  • MSCHAPv2 与 RADIUS - 加密过程到底如何进行?

    我正在构建一个 RADIUS 服务器来与 node js 中的 MS CHAPv2 配合使用 我有一个 RADIUS 客户端 它是在访问请求中向我发送以下内容的 VPN 服务器 用户名 MS CHAP 挑战 MS CHAP2 响应 我使用实
  • 如何使用 Android 4.0 以编程方式创建新的 VPN 接口?

    我想知道是否可以使用 Android 4 0 中的新 VPN API 以编程方式创建 VPN 接口 我已经看过了http developer android com resources samples ToyVpn http develop
  • 数据包已发送但无法接收到数据包

    我一直在编辑安卓toyvpn https android googlesource com platform development master samples ToyVpnVPN 的示例项目 我为我的示例应用程序找到了这个 我知道我的代
  • 如何在 Android ICS 上检查 VPN 连接状态

    我正在尝试注册接收器 这将检查 VPN 状态 我已经尝试过这个 在 Android 上获取 VPN 连接状态 https stackoverflow com questions 3461967 get vpn connection stat
  • “建立安全 TLS 连接之前客户端网络套接字已断开”,节点 10

    当我向 google api 发送请求时 使用 axios 或仅使用 https 例如https www googleapis com blogger v3 blogs 2399953 key 我总是点击 在建立安全 TLS 连接之前 客户
  • iOS Objective-C 以编程方式获取 VPN IP

    我使用第三方应用程序连接VPN 我们可以在以下位置获取详细信息Settings gt VPN gt information 我怎样才能得到Assigned IP通过 Objective C 在我们的应用程序中以编程方式 NSString a
  • 无法安装VPN和应用程序用户证书

    我无法在 Android 11 上安装 VPN 和应用程序用户证书 的证书 我尝试通过 设置 菜单 gt 从设备存储安装 gt VPN 和应用程序用户证书 进行设置 但我看到错误如 此文件不能用作 VPN 和应用程序用户证书 但奇怪的是 两

随机推荐

  • SQL Server 2012的安装与环境配置以及在Java中连接数据库

    自学Java也已快有一个月了 虽然本人从事的是FPGA开发的工作 但是对于软件开发兴趣盎然 没办法只能工作之余自己慢慢自学了 这应该是我的第一篇Java学习文章 希望以后自己能够坚持 记录一些学习过程 做一些有意思的事 慢慢实现自己的目标吧
  • echarts雷达图自定义射线颜色、边框效果和背景样式

    目录 1 在官网找样例 2 初步改造示例 有个雏形 3 细节改造和优化 4 全部代码 5 原始效果和完成效果对比 1 在官网找样例 样例地址 Examples Apache ECharts 2 初步改造示例 有个雏形 对应的代码 为了说明问
  • 1.7 编程基础之字符串 15 整理药名 python

    http noi openjudge cn ch0107 15 1 7 编程基础之字符串 15 整理药名 http noi openjudge cn ch0107 15 Python字母大小写的转换 两种方法 https blog csdn
  • Java实体类转Map、Map转实体类

    1 创建entity User java package com jeff entity public class User private String userName private String password private I
  • Python错误处理的艺术:使用retrying库实现高效重试机制

    简介 学习如何使用 Python 的 retrying 库来处理在程序运行过程中可能出现的各种异常和错误 retrying 是一种简单 易于使用的重试机制 帮助我们处理由网络问题或其他暂时性错误引起的失败 在很多情况下 简单的重试可能就是解
  • SSM框架运行原理

    ssm框架 包括 springMVC spring mybatis springMVC 是基于MVC的框架 属于MVC框架的还有 Struts1 Struts2 SpringMVC 获取值得方式 Struts1 actionForm jav
  • SylixOS学习三—— SylixOS的引导与安装1

    自学SylixOS启程之旅笔记 一 SylixOS 引导过程分析 1 SylixOS 常用引导程序 2 SylixOS 支持ARM设备的几种引导方式 3 SylixOS引导过程分析 总流程分析 3 1 一个设备从上电到启动完成的整个流程 3
  • 使用两个队列实现一个栈,使用两个栈实现一个队列

    一 栈与队列的特点 一 栈 栈 一种特殊的线性表 其只允许在固定的一端进行插入和删除元素操作 进行数据插入和删除操作的一端称为栈顶 另一端称为栈底 不含任何元素的栈称为空 栈 栈又称为后进先出的线性表 栈的特点 后进先出 LIFO 二 队列
  • Java ZipOutputStream 的使用,实现压缩文件

    Java 压缩文件主要通过 ZipOutputStream 实现 ZipOutputStream 有 5 个关键的方法 putNextEntry 向压缩包中添加子文件 并设置文件路径和名称 压缩包解压后得到的文件叫子文件 该方法接受一个 Z
  • Flask框架十:Flask终章与补充(首)

    1 WTForms的表单验证 form表单验证的类型有多种 邮箱 年龄 是否为空等多种验证 以及验证码等验证 WTForms都提供了相关的验证模块 创建一个froms模块 将想要验证的视图模块中的内容写在类里面 from wtforms i
  • 如果我想用vue来对导入的word文件进行解析呢

    如果你想使用 Vue 来解析 Word 文件 你可以考虑使用第三方库来帮助你完成这个任务 你可以使用 js word library 来解析 Word 文件 它是一个 JavaScript 库 可以解析 Word 文件中的文本 图像 表格等
  • GIF演示排序算法

    最近在准备笔试 面试 看了不少关于排序算法的知识 总感觉代码有余 直观不足 所以想利用直观的GIF动图来演示各种排序算法 1 插入排序 Insertion Sort 1 1算法简介 插入排序 Insertion Sort 的算法描述是一种简
  • CentOS7的firewall和安装iptables

    前言 CentOS7 的防火墙默认使用是firewall 而我们通常使用iptables 本文记录了firewall基础的命令和iptables的安装和使用 firewall部分 part1 服务命令 systemctl start fir
  • 简析多级指针解引用

    转自 简析多级指针解引用 指针是C语言中公认的最为强大的语法要素 但同时也是最难理解的语法要素 它曾给程序员带来了无数麻烦和痛苦 以致于在C语言之后诞生的很多新兴 语言中我们再也难觅指针的身影了 下面是一个最简单的C语言指针的例子 int
  • hadoop使用(五)

    博客园 闪存 首页 新随笔 联系 管理 订阅 随笔 247 文章 122 评论 571 hadoop使用 五 第1章 引言 1 1 编写目的 对关于hadoop的文档及资料进行进一步的整理 1 2 相关网站 毋庸置疑 http hadoop
  • 查看3306端口被谁占用

    今天安装mysql一直有问题 怀疑3306被谁占用了 排查开始 一 使用命令符netstat命令查看 netstat a n 显示各个端口占用 netstat ano 显示各个端口占用和进程PID 二 使用netstat aon finds
  • 虚拟机无敌大坑,安装不了cuda和cudnn

    大家好 想用虚拟机装cuda和cudnn这两个环境 如果需要的话不要在虚拟机中装 根本装不好 踩了两天的坑 才知道在虚拟机环境下是无法安装cuda和cudnn得 因为虚拟机环境下根本无法识别到你的显卡版本 只有一个虚拟机得环境 所以如果想安
  • 在eclipse的Server里找不到Apache tomcat的解决方案

    我们在创建Dynamic Web Project时在新界面一栏中 Target runtime一栏是空 没有可选择的tomcat 点击右侧的New Runtime后看到如图没有对应的Apache 同样我们在上面的windows gt pre
  • RK3588 添加ROOT权限

    一 ROOT简介 ROOT权限是Linux和Unix系统中的超级管理员用户帐户 该帐户拥有整个系统的最高权利 可以执行几乎所有操作 ROOT就是获取安卓系统中的 最高用户权限 以便执行一些需要高权限才能执行的操作 包括卸载系统自带程序 刷机
  • openswan pluto代码分析--(1)pluto简介

    pluto简介 pluto是一个openswan中的守护进程 提供IKEv1服务 Pluto通信消息 网卡数据报文消息 whack命令的消息 内核通信消息 接下来分别介绍上面三种通信消息 1 网卡数据报文消息 打开UDP500和4500端口