fwknop SPA服务端源码编译

2023-11-08

1. 背景介绍

fwknop实现的是SPA(Single Packet Authorization)技术,其作用是通过对指定端口的打开和关闭,来控制端口的显示和隐藏。当端口被关闭时,此端口将无法被访问,若要向访问此端口则需要使用指定的客户端发送报文(经过加密)进行认证,认证通过后就可对此端口进行访问。具体的使用方式将在之后的博文中介绍,本篇主要介绍fwknop的编译。

2. 源码编译

其实fwknop的服务端及客户端可以直接在Ubuntu上通过命令安装,那还为什么要将它的源码编译呢? 这里进行源码编译的原因如下:

  1. 使用fwknop后产生了,知其然知其所以然的想法
  2. 研究源码方便二开
  3. 学习新的知识,特别是开源的代码一定要将其编译跑通,达到可调式的地步,要不然学习的效率会折半

2.1 源码获取

fwknop源码获取,我这里下的版本是2.6.11

2.2 环境介绍

  1. Ubuntu 18.04.5 桌面版
  2. VM虚拟机下运行
  3. Ubuntu虚拟机为初始环境,所以我的编译过长可能会比较长,请大家选取自己所需部分即可

2.3 对git克隆下来的代码直接进行编译

  1. 切换到源码所在目录运行: ./autogen.sh,运行之后若有什么工具没有安装会提示的,我这里安装如下工具:
    在这里插入图片描述

    1. sudo apt-get install libtool
    2. sudo apt-get install automake
    3. 安装后重新运行autogen.sh,有关libtool及automake工具的作用大家可自己百度,以后若有机会将会出相关的博文进行详细介绍
  2. autogen.sh正常运行后,运行./configure,configure有些参数信息可以运行"./ configure --help"进行查看,参数中可以配置是否构建客户端,我这里没有进行配置,按照默认进行生成的。运行后根据提示我这里需要安装如下工具:
    在这里插入图片描述

    1. sudo apt-get install libpcap-dev
  3. 运行make(我这里需要安装sudo apt-get install make),运行后报错,如下:
    在这里插入图片描述

    1. 有关‘makeinfo‘ is missing on your system,这个需要安装textinfo,sudo apt-get install texinfo
  4. 运行./autogen.sh

  5. 运行./configure

  6. 当生成fwknopd和fwknop两个可执行文件后至此编译完成,也可以运行sudo make install 进行安装,这样会将服务端与客户端都安装上去

  7. 通过make install安装后,可以使用 "sudo make uninstall"进行卸载

2.4 挑选出C++部分的服务端进行编译

fwknop最初是由perl进行开发,现在最新的版本则是由C++进行开发,所以当然选最新的咯(弱弱的说句:其实是不会perl)。至于为什么直接使用源码中提供的方式直接编译(它不香吗?),非要自己折腾。这里就简单说下:

  1. 对Linux下大型项目的编译工具什么的不了解,知识有所欠缺(makefile也不是很熟悉)
  2. 自己重新写最原始的gcc 编译指令,对项目的功能模块会有一定的了解
  3. 以上拙见,若有不足之处请各位评论区留言指正

接下来开始单独编译fwknop-server:

  1. 将common、lib及server目录单独存放到一个文件夹

  2. 编译common并将其制作成一个静态库libfko_util.a

    1. 指令gcc -c strlcpy.c strlcat.c fko_util.c -w -I../lib -I./
    2. 编译时可能" ‘EXIT_FAILURE’ undeclared",此时将报错的文件添加"#include <stdlib.h>"
    3. 制作静态库ar -rcs libfko_util.a *.o
  3. 编译lib同样的将结果输出为一个静态库libfko.a

    1. 编译的时候将先common.h和fko_common.h中的strnlen注释掉
    2. 指令gcc -c base64.c cipher_funcs.c digest.c fko_client_timeout.c fko_digest.c fko_encode.c fko_decode.c fko_encryption.c fko_error.c fko_funcs.c fko_message.c fko_nat_access.c fko_rand_value.c fko_server_auth.c fko_timestamp.c fko_hmac.c hmac.c fko_user.c md5.c rijndael.c sha1.c sha2.c sha3.c gpgme_funcs.c -w -I./ -I../common
    3. 制作静态库ar -rcs libfko.a *.o
  4. 编译server

    1. 指令gcc -o fwknopd fwknopd.c config_init.c incoming_spa.c pcap_capture.c process_packet.c log_msg.c utils.c sig_handler.c replay_cache.c access.c fwknopd_errors.c tcp_server.c udp_server.c fw_util.c fw_util_ipf.c fw_util_firewalld.c fw_util_iptables.c fw_util_ipfw.c fw_util_pf.c extcmd.c cmd_cycle.c -lfko_util -L ../common -lfko -L ../lib -lpcap -lgdbm -D HAVE_LIBGDBM -w -D ‘SYSCONFDIR=“/etc”’ -D ‘PACKAGE_NAME=“/fwknop”’ -D ‘SYSRUNDIR=“/var/run”’ -D ‘VERSION=“2.6.11”’ -D FIREWALL_IPTABLES -D USE_LIBPCAP -D HAVE_SYS_WAIT_H -D ‘FIREWALL_EXE=“/sbin/iptables”’ -I../lib -I../common
    2. 编译的时候多数错误是没有包含头文件,下面列举比较特殊的错误:
      1. 关于gdbm,解决sudo apt install libgdbm-dev在这里插入图片描述
      2. 关于ether_header,解决:包含头文件"<linux/if_ether.h>",将ether_header替换为ethhdr,将ether_type替换为h_proto 在这里插入图片描述
      3. 关于ETHER_IS_VALID_LEN,解决: 包含头文件<net/ethernet.h> 在这里插入图片描述
  5. 编译说明

    1. 之所以编译这些源文件,是分别参考common、lib及server目录下的Makefile.am文件
    2. 在编译server时的宏定义上可以简单看出server的结构,其中使用的到了gdbm、libpcap、iptables及配置文件,有关server的具体功能模块及源码分析以后详细介绍
    3. fwknop源码中用到了CUnit,进行单体测试,我编译的时候没有用到,如果需要CUnit安装如下:
      在这里插入图片描述

好了到此编译结束,打完收工,哈哈!

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

fwknop SPA服务端源码编译 的相关文章

随机推荐

  • 硬核推荐15个最火的Spring实战开源项目!总有一款适合你!

    哔哩哔哩在线演示视频 https www bilibili com video av92191212 Guide哥注 下面这些推荐的项目几乎都和 Spring Boot 有关 毕竟这年头没有理由再搞 SSM SSH 这些东西了 商城系统 G
  • disconnected no supported authentication methods available(server sent: publickey,keyboard interae)

    disconnected no supported authentication methods available server sent publickey keyboard interactive 解决方案 因为乌龟Git和Git的冲
  • Navicat-Cracker NavicatCrackerDlg.cpp:332 -3All patch solutions are 解决Navicat 162版本注册问题的方法与分析【详细步骤】

    博主 libin9iOak带您 Go to New World 个人主页 libin9iOak的博客 面试题大全 文章图文并茂 生动形象 简单易学 欢迎大家来踩踩 IDEA开发秘籍 学会IDEA常用操作 工作效率翻倍 希望本文能够给您带来一
  • 【Python 1-18】Python手把手教程之——异常处理、try-except、error

    作者 弗拉德 来源 弗拉德 公众号 fulade me 异常 Python使用被称为异常的特殊对象来管理程序执行期间发生的错误 每当发生让Python不知 所措的错误时 它都会创建一个异常对象 如果你编写了处理该异常的代码 程序将继续运行
  • postgresql添加postgis注意事项

    安装postgresql和postgis必须安装在同一目录下 这样才可以安装成功 其他安装步骤网上资料很多 推荐这个https wenku baidu com view ac2b40ab284ac850ad0242f3 html 进入pos
  • Best of Articles :: Microsoft Smartphone Programming

    This sort of book is a collection of different articles combined under related chapters Chapter 1 Introduction to the NE
  • 数据可视化学习笔记:Python实现汽车品牌销售量矩形树图

    引言 本文将介绍如何使用 Python 和 Pyecharts 库创建一个汽车品牌销售量的矩形树图 我们将使用 Pandas 读取 CSV 文件数据 然后对数据进行处理 封装 最后将数据可视化为矩形树图 准备工作 首先 我们需要先安装好相关
  • PHP源码安装脚本

    bin bash Author Mr Wu PHP安装脚本 WARNING 如网速不好 需上传php 8 1 9 tar gz包 2023 3 2 22 55 55 定义变量 dep pack epel release make apr p
  • 全国城市房价分析(pandas)

    中国主要城市的房价可以从https www creprice cn rank index html获取 该网页中会显示上一个月的房价排行情况 先复制前10个城市的数据 然后使用pd read clipboard 读取 我们来分析一下该月的数
  • 28个python爬虫项目,看完这些你离爬虫高手就不远了

    互联网的数据爆炸式的增长 而利用 Python 爬虫我们可以获取大量有价值的数据 1 爬取数据 进行市场调研和商业分析 爬取知乎优质答案 筛选各话题下最优质的内容 抓取房产网站买卖信息 分析房价变化趋势 做不同区域的房价分析 爬取招聘网站职
  • 数据库事务的隔离等级

    数据库的事务隔离级别有4个 由低到高依次是Read uncommitted Read Committed Repeatable read Serializable 这四个级别可以逐个解决脏读 不可重复读 幻读等问题 Tables 脏读 不可
  • 5G房子将会进一步带来更多的就业机会

    此次微信和支付宝面向市场推出的刷脸支付的产品 在安全上做了极大的努力 通过数据层层加密 保障了商户的资金安全 同时也为消费者带来了全新的消费体验 减少了商户在高峰期人流量分流的问题 与传统的聚合二维码收银台形成了优势互补的作用 通过微信和支
  • 如何使用sort快速排序

    试题 算法提高 快速排序 提交此题 评测记录 资源限制时间限制 1 0s 内存限制 256 0MB问题描述 用递归来实现快速排序 quick sort 算法 快速排序算法的基本思路是 假设要对一个数组a进行排序 且a 0 x 首先对数组中的
  • Unity3d + UGUI 的多分辨率适配

    原文地址 http blog csdn net dingkun520wy article details 49471789 1 Canvas的属性配置 2 Canvas Scaler
  • Spark Streaming的流数据处理和分析

    一 Spark Streaming 1 Spark Streaming概述 1 1 实时数据处理的动机 以前所未有的速度创造数据 来自移动 网络 社交 物联网的指数数据增长 联网设备 2012年为9B 到2020年将达到50B 到2020年
  • 2023年Python面试题_Python基础_42道

    什么是 Python Python 是一种编程语言 它有对象 模块 线程 异常处理和自动内存管理 可以加入其他语言的对比 Python 是一种解释型语言 Python 在代码运行之前不需要解释 Python 是动态类型语言 在声明变量时 不
  • linux中mariadb数据库升级

    前言 在使用mariadb的数据库 mysql有同样的问题 过程中 发现老版本的数据库的一些问题 1 自增字段是在内存里的 数据库重启后就会丢失 新的自增字段是根据表中已有数据的最大值 1 数据表的如果没有记录 自增字段又从头开始了 2 数
  • Python入门自学进阶-Web框架——23、DjangoAdmin项目应用-定制页面

    一 单个菜单页面实现 类似DjangoAdmin中点击一个管理表打开的样子 以客户首页为例 这里cust index就是路由表中的name字段的值 即别名 对应的就是路由项中的cust html 即对应视图函数cust index 视图函数
  • CREATE TABLE 语句

    CREATE TABLE 语句用于创建数据库中的表 语法 CREATE TABLE table name column name1 data type size column name2 data type size column name
  • fwknop SPA服务端源码编译

    fwknop 源码编译 1 背景介绍 2 源码编译 2 1 源码获取 2 2 环境介绍 2 3 对git克隆下来的代码直接进行编译 2 4 挑选出C 部分的服务端进行编译 1 背景介绍 fwknop实现的是SPA Single Packet