tcp客户端
socket.AF_INET表示使用标准IPV4地址和主机名
SOCK_STREAM表示这是一个TCP客户端
udp客户端
udp无需连接,因此不需要client.connect这种代码
socket.SOCK_DGRAM是udp的
tcp服务端
server.listen(5)表示设置最大连接数为5
发现kill server后端口仍占用导致无法再次启动server,查了下可用lsof -i tcp:port (-t)查看端口占用进程,再kill即可
执行看下结果
取代netcat
netcat是一个网络管理相关shell工具,书里不建议用这个,因为有一些风险,有的server装了py服务器,没装netcat。当通过web入侵后,如果可以创建连接客户端和服务端则对入侵很有帮助
创netcat.py,导入基本库
定义main
定义NetCat类
验证netcat
开客户端服务端看效果
发现有时候会有问题,想了一下,应该是send和recv时间不同步导致的
开发tcp代理
代理为了测试用,开发具有如下功能的代理:1显示本地设备和远程设备通信过程 2从socket接受数据 3控制设备流量方向 4创建socket监听
该函数可查看代理内数据流通
实现数据接收,设定超时时间,这样就不会无限sleep监听,超时时长可根据实际情况修改
proxy主要逻辑如下,定义proxy要做的事,然后定义框架
定义server侧逻辑,server_loop函数,用来管理和创建连接,请求的数据创现成让上面定义的proxy_handler函数处理
定义main函数
验证tcp代理
启动代理
开两个窗口,一个server一个client看效果
发现因为timeout,命令要在timeout输入否则异常,每个命令timeout内输入,看起来正常
基于paramiko的ssh通信
上面开发的tcp代理未实现数据加密,可能会被别人监测到,可以通过ssh加密避免数据泄漏,也可以使用内置了ssh的python模块比如paramiko,是基于pycrypt开发的库,支持ssh2
paramiko支持密钥认证
set_missing_host_key_policy可支持未记录的公钥请求并将其记录
测试下脚本
对于windows发行版来说,默认没装ssh server只有ssh client,如果直接ssh连windows会连不上,此时可以将windows当成一个命令下发机器,将要执行的命令下发到其他机器。即windows机器充当server角色但不执行命令把命令下发到client让clieng执行命令,执行完了再把结果从client返回到server,server再将结果返回给请求者
client端:
server端:
验证paramiko ssh通信
在windows端启动server脚本:
windows再开一个窗口运行客户端代码
验证失败,auth error不知道为啥