吹着前奏望着天空,我想起 Task 试着完成,为它爆肝的那一天,断电的那一天,709 的那一间,我怎么看不见,消失的 DDL,我好像再来一年~
安装准备
Problem1.apt 源配置问题
在开始之前,我才发现自己的 apt 源配错了。我使用的是 Ubuntu19.10(eoan),但是 apt 源里居然全写的是 Ubuntu 18.04 LTS(Bionic)的源……
因此出现了花式安装报错的问题。
Solution:
自己手动把所有的 Bionic 都换成 eoan……
Problem2.没有合适的 IDE
由于这次任务需要在 Linux 上完成,自己的能力又没有强到能够用眼调试的水平。因此需要安装一个 IDE。(能用 GCC 调试我也服气)
Solution:
用 HUST 邮箱整一个 CLion。网址:CLion
白嫖就完事了~
Echo Server
代码
话不多说,直接上代码:
Linux Server 端
1 |
|
Windows client 端
1 |
|
效果
Problem
Socket 一直不能建立连接
这是由于 Linux 和 Windows 的防火墙策略设置
Solution:
在 Linux 中安装白名单 IP 地址:
1 | sudo iptables -N whitelist-A whitelist -s 10.10.68.58 -j ACCEPT #将10.10.68.58换成你的主机真实网卡的IP地址 |
网卡设置有误
在 Task1 中,我错误地将主机中 VMnet8 的 IP 地址设置成了 VM1 的 IP 地址 192.168.188.128,导致出现了我一直都不能用 ssh 连接上我的虚拟机,但是 ping 又能 ping 通的诡异现象。
Solution:
在 Windows 系统中,更改 VMnet8 这张网卡的 IP 地址在虚拟机的相同网段下的其它 IP,例如说 192.168.188.1。
客户端协议设置出错
由于之前在熬测的时候写过了类似的程序,于是乎我想都没想就在 Windows 系统上的 client 用了之前的的源码,然而这份源码是 UDP 协议的,但是在 Linux 上跑的是 TCP 协议的 Server,导致 Server 一直不能发包到 Client。
Solution:
重写 Windows 系统下的源码,改用 TCP 协议。
虽然这次错误实在是有点蠢,但是我因此更加明确了我这次 Task 使用的一些 socket 函数在 UDP 协议与 TCP 协议的不同情况下使用的一些区别,也算是因祸得福(确信。
拓展
client
1 |
|
Server
1 |
|
File Server
话不多说,直接上代码
代码
Linux receiver
1 |
|
Windows Sender
1 |
|
效果
Problem
Problem1:
遇到了服务端创建文件成功,但是写入文件失败的情况
Solution:
经过检查发现,是 Linux 接收端的代码出现了问题。我写了一个死循环来实现持续接收文件。但是忘记了在每次接收完文件后使用 fclose()语句来释放文件指针,导致文件写入失败。
iptables 过滤报文
通过使用 iptables 丰富的拓展模块,我们可以实现以下 Task 所要求的内容:
根据字符串过滤
这个实现简单快捷,只需要一条 shell 语句:
1 | sudo iptables -t filter -I INPUT -m string --algo bm --string "CyberSecurity" -j REJECT |
‘-I INPUT’表示对 INPUT 链进行操作
‘-m string’ 表示使用 string 模块。
‘–algo bm’表示使用 bm 算法去匹配指定的字符串。
‘–string “CyberSecurity”‘则表示我们想要匹配的字符串。
实现效果:
根据时间过滤
这个实现也只需要一条 shell 语句:
1 | sudo iptables -t filter -I INPUT -p tcp --dport 28345 -m time --timestart 13:00:00 --timestop 16:00:00 -j REJECT |
注意,这里的时间默认使用的是 UTC 标准时间,我们需要将我们想要设定的时间-8(因为我们在东八区)才可以使设置正常生效。
‘-I INPUT’表示对 INPUT 链进行操作
‘-m time’表示使用 time 模块。
‘–timestart’选项用于指定起始时间
‘–timestop’选项用于指定结束时间
实现效果:
其余部分
能力有限
时间不足
告辞,有空会回来补的