python之渗透测试笔记(一)

Caroline ·
更新时间:2024-09-21
· 785 次阅读

python之渗透测试(一)—— Socket模块Socket模块须知简介基本用法使用Socket编写一个简单的服务端和客户端 Socket模块须知 在TCP/IP协议族中,Socket并不是协议,而是一个编程接口。 TCP/IP是传输层协议,主要解决数据如何在网络中传输,而Socket则是对TCP/IP的封装和应用。 TCP是网络中的规则,是不能修改的,而Socket则是给程序员使用的,是可以任意使用的。 Socket常称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。 简介 在python中,使用Socket进行编程的时候,需要先实例化一个Socket类,这个实例化需要三个参数:第一个参数是地址族,第二个参数是流,第三个参数是使用的协议。 基本用法 socket的实例化 socket实例化的格式化格式: socket(family,type[,protocal])

family是使用地址族,常用的协议族有AF_INET、AF_INET6、AF_LOCAL(或称AF_UNIX、UNIX域Socket)、AF_ROUTE等。默认值为socket.AF_INET。

type用来指明Socket类型,这里有三个值可以使用: SOCK_STREAM(TCP类型,保障数据顺序和可靠性)、SOCK_DGRAM(UDP类型,不保证数据连接顺序,非可靠连接)、SOCK_RAW(原始类型,允许对底层协议如IP或ICMP进行直接访问)。默认值为SOCK_STREAM。

protocal是使用的协议,参数可选。通常赋值’0’,由系统自动选择。

初始化TCP类型:

s=socket.socket() 或s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) 初始化UDP类型: s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

2.Socket常用的函数

2.1 服务器端函数:

bind():将之前创建的Socket与指定I的P地址和端口进行绑定。如果之前使用了AF_INFT初始化Socket,可以使用元组(host,port)的形式表示地址。例如: s.bing(('127.0.0.1',8080)) #绑定本机的8080端口 listen():使用TCP的服务端开启监听模式。使用参数指定可以挂起的最大连接数量,最小为1,一般为5。例如: s.listen(5) accept():在使用TCP的服务端接收连接,一般是阻塞态。接收TCP连接并返(conn,address),conn是新的套接字对象,可用来接收和发送数据;address连接客户端地址。

2.2 客户端函数:

conncet():在使用TCP的客户端去连接服务器地址。使用参数是一个元组,形式为(host,port)。例如: s.connect(("127.0.0.1",8080)) #连接本地的8080端口

2.3 客户端和服务器都可以使用的函数:

send():使用TCP时发送数据。形式为send(string[,flag]),返回值是发送字节的数量。但可能未将指定的内容全部发送。 sendall():与send()类似,形式为sendall(string[,flag])。与send()的区别是完整发送TCP数据。将string中的数据发送到连接的套接字,但返回之前会尝试发送所有数据。成功返回None,失败则抛出异常。例如: s.sendall(bytes(" Hello python ! "),encoding = "utf-8") recv():使用TCP时接收数据。完整形式为recv(bufsize[,flag]),接收Socket的数据。数据以字符串形式返回,bufsize指定最多接收的数量,flag参数一般不使用。例如: odj.recv(1024) #接收一段长度为1024的字符Socket sendto():使用UDP时发送数据,完整形式为sendto(string[,flag],address),返回值是发送的字节数。其中,address是形式为(ipaddr , port)的元组,指定远程地址。 recvfrom():UDP专用,接收数据,返回数据远端的IP地址和接口,但返回值是(data , address)。其中,data是包含接收数据的字符串,address是发送数据的套接字地址。 close():关闭socket。 使用Socket编写一个简单的服务端和客户端 服务端程序: import socket s2 =socket.socket() #初始化一个TCP类型的socket s2.bind(("127.0.0.1",8080)) #绑定到本地8080端口 s2.listen(5) #使用TCP的服务端开启监听模式 while 1: conn,address = s2.accept() #接收TCP连接并返回(conn,address),conn是新的套接字,用来接收和发送数据;address连接客户端地址 print ("a new connect from " + str(address)) conn.sendall("Hello world") #发送数据 conn.close() 客户端程序: import socket #导入socket库 s1 = socket.socket() #初始化一个TCP类型的socket s1.connect(("127.0.0.1",8080)) #连接目标127.0.0.1的8080端口(测试使用本机地址),使用参数是一个元组,形式为(host,port) data = s1.recv(1024) #连接成功,发送数据 s1.close() #关闭连接 print('Received ' + repr(data)) #输出服务器发送的数据
作者:坠落星空



渗透测试 测试 Python

需要 登录 后方可回复, 如果你还没有账号请 注册新账号