# firewall simulator **Repository Path**: lucca9102/firewall-simulator ## Basic Information - **Project Name**: firewall simulator - **Description**: Just for fun and practice! simulate a firewall - **Primary Language**: C - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-04-04 - **Last Updated**: 2021-04-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # A firewall simulator > author: Lucca9102 > > mail: luccachina@163.com > > environment: Visual Studio 2019 Community ## 前言 这个程序是上课无聊突发奇想做的,到今天为止刚好花了一周时间。 程序的作用是模拟一个防火墙,有以下几种功能 - 根据收到的数据包信息添加 IP 或 端口 的配置 - 直接输入 IP 进行配置 - 直接输入 端口 进行配置 - 根据传输协议配置 - 根据网卡接口配置 - 列出所有配置内容 - 根据以上配置检查并拦截或放行数据包(在第一点体现) - 退出程序 ## 一些技术性的内容 ### 文件结构 `main` 是主程序,每个 `.c` 文件都有对应的 `.h` 头文件。 `main.h` 主要负责声明大家都要用的类型和全局变量,以及各种各样的宏。 `main.c` 主要进行流程控制,几个全局变量的空间分配,没有太多实质性的内容。 `wallinit.*` 负责初始化防火墙。第一次使用时会创建一个叫 `.wallinit` 的初始化文件,根据用户的选择创建配置文件。以后使用时会读取初始化文件,找到配置文件的地址,读取已经存储的配置,并为各种全局变量赋值。 `pkgFlow.*` (名字瞎起的hhh)负责获取随机生成的数据包,包内容有源 IP : port,目的 IP : port,协议和通过的网卡接口。 `firewallHint.*` 负责一些提示信息,不过在后面的开发中显得不太重要了,可以考虑删掉。 `firewallConfig.*` 本程序最重要的一个模块。包含了所有配置内容。 ### IP 和 Port 配置文件中的 `Hash` 值 (因为想不到合适的词就随便捡了 `Hash` 写上的) IP 的 `Hash` 值由以下部分组成: - 8 位十六进制数,表示 IP - 10 位时间戳(本来 `time_t` 是 16 位的,我算了一下,10 位就够用 2000 多年,就留了 10 位) - 最后一位标识 IP 是作为源还是目的时将被拦截。`s` 代表源;`d` 代表目的 类似地,port 的 `Hash` 前四位代表端口号,后面一样。 ### 关于 `fseek` 在配置部分用到了各种各样的 `fseek` 函数。有一些操作可能比较迷惑:为什么跳一行要用 `LEN + 1` 呢? 我使用的是 Windows 系统,不知道是不是系统的原因(CRLF 和 LF),我的 `'\n'` 要占两个字节。如果用 `fseek` 跳 `LEN` 长度,在读取的时候仍然会读到 `'\n'`。这个不是一开始就发现的。为了不影响之前的程序,就使用了这样的迷惑操作。 ### 代码行数统计 | FILENAME | lines | | :--------------: | :---: | | main.h | 58 | | main.c | 220 | | wallinit.h | 9 | | wallinit.c | 271 | | pkgFlow.h | 9 | | pkgFlow.c | 63 | | firewallHint.h | 20 | | firewallHint.c | 55 | | firewallConfig.h | 27 | | firewallConfig.c | 623 | | 合计 | 1355 | ## 后记 这个项目是我写的第一个 C 语言项目(之前都是单个文件的)。由于时间仓促,技术也及其有限,注释写得很少(好吧也是因为懒 XD)。反正我也不是计算机专业的,写这个就图一乐 What's more, due to my poor poor English, there may be many grammar mistakes in the project. If you found any of them, please send me a pull request if you'd like or just email me! 这个项目大概率是没有后续更新的,如果有什么问题或高见,欢迎给我发邮件,希望大家能够不吝赐教!