欢迎来到黑帽子编程 网络编程第二篇文章,上回我们已经学会了如何创建 TCP 客户端/服务器 也实现了了 短链接 - 长连接, 半双工通讯 - 全双工通讯
上一篇文章是基础,建议先看: Python 黑帽子编程 (一) 网络编程
通过渗透测试进入的服务器没有安装 netcat 却安装了 Python。在这种情况下,Python 可以快速的创建一个简单的服务器和客户端用来传递想要的文件。
文件数据读取 _open()
我们先来创建一个文件读取的函数 _open() 方法
执行结果太长了, 复制不过来,就不贴了
文件写入/保存 _save()
接下来我们创建一个 文件保存的函数 _save()
这样我们的读写文件函数就准备好了. 接下来我们只需要创建一个网络通道来传输文件数据就好了
约束/协议
像 HTTP (应用层)协议那样, 数据包的第一行为请求行 包含 请求方法 请求路径 HTTP版本,然后头部附加信息, 最后是请求内容。我们也可以为我们的程序定义一个简单的通讯协议
发送文件前我们先发送 文件名和文件大小最后发送文件数据,这样方便我们接收和写入数据。这也是一个不错的 Python 习题,让我们开始把
服务器
① 解析第一个数据包拿到文件名称和大小,② 准备好接收之后发一条信息告诉客户端 我尊卑好了 可以发送文件数据 ③ 保存成功后响应信息。
客户端
① 从文件路径中解析文件名称,② 封装第一个数据包 文件名和文件大小,③ 等待客户端告诉自己可以发送文件数据,④ 等待执行结果。
执行结果
服务器
"C:\Program Files (x86)\Python38-32\python.exe" D:/python/socket/server.py
[+] Listening on port 8888
[+] Accepted connection from 127.0.0.1:2084
[+] Receive to filesize: 377561
[+] File save on fa5b0887640934e04f8c03bddf5c4f7fe3e7a13c.jpg@518w_1e_1c.jpg, size: 377561Process finished with exit code -1
客户端
"C:\Program Files (x86)\Python38-32\python.exe" D:/python/socket/client.py
[+] Connected successfully .
[+] File transfer success
Process finished with exit code 0
文件大小是 377561字节(byte), 368.71191 KB 我们看一下计算机上面的 368 KB 没有问题
大家可以优化, socket连接的异常处理, 判读文件是否存在,文件hash名称, 存储成功后返回文件名等等。下一篇文章我们尝试做一个反弹 shell,最后我们将这两个功能结合,做一个简单的 netcat