今天的学习内容是如何用python编写一个tcp服务端,和客户端,它们之间是如何传输数据的,最后解释演示一下反弹shell是怎么实现的。
首先我们需要了解以下几个词是什么
c/s架构
c客户机s服务器
客户机向服务器发送请求,一直等待服务器返回相关数据然后反馈给客户机,客户机对信息进行分析处理,在返回相关信息给服务器。
c/s网络编程
服务端设置一个监听端点,能够监听请求,之后就是等待和处理请求的一个无线循环
客户端只要创建一个通信端点,建立与服务器的连接,就可以发送请求了
套接字
套接字是一种具有上面所说的“通信端点”概念的计算机网络数据结构,网络化应用程序在开始任何通讯之前,都必须创建套接字。
python支持的套接字:AF_UNIX,AF_NETLINKliunx支持,AF_INET,其中AF_INET是基于网络的套接字
python网络编程socket模块
socket模块的socket()函数用来创建套接字
创建一个tcp套接字
方法tcpsock=socket(socket.AFinet,socket.SOCK_STREAM(#基于tcp数据传输))
服务器端的套接字函数
s.bind()绑定地址(主机,端口)到套接字
s.listenn()开始tcp监听
s.accept()被动接受客户端连接,(阻塞式)等待连接的到来啊
客户端套接字函数
s.connet()主动初始化tcp服务器连接
s.connet_ex()connet函数的扩展版本,出错时返回错误代码,而不抛出异常
公用套接字函数
s.recv接受tcp数据
s.send发送tcp数据
s.sendall()完整发送tcp数据
s.recvfrom()接受udp数据
s.sendto()发送udp数据
s.getpeemame()连接到当前套接字的远端地址
s.getsockopt()返回指定套接字参数
s.setsockopt()设置指定套接字的参数
s.close()关闭套接字创建必须要关闭,不然会占用大量的内存空间,导致服务器运行缓慢等问题
如何用python创建客户端和服务端,让他们进行通信
1创建一个tcp服务器
ss=socket()#创建服务器套接字
ss.bind()#把地址绑定到套接字上
ss.listen()#监听连接
infloop#服务器无线循环
cs.recv()/cs.send#对话接受与发送
cs.close()#关闭客户端套接字
完整代码如下
2创建一个tcp客户端
cs.cocket()#创建客户端套接字
cs.connet()#尝试连接套接字