免责声明
本文仅用于技术讨论与学习,利用此文所提供的信息或工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。
一、python网络编程介绍
python开发人员使用各种第三方工具创建的客服端和服务端的核心都是socket模块,用于快速开发TCP/UDP客户端,服务端。
Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。
二、TCP客服端
在渗透测试过程中,经常需要创建一个TCP客户端,用于测试服务、发送垃圾数据,进行fuzz等。
import socket ##导入socket模块,该模块提供了创建和操作套接字所需的函数。
##设置目标主机和端口
target_host = "www.baidu.com"
target_port = 80
##在这里,使用IPv4(AF_INET)和TCP(SOCK_STREAM)参数创建了一个名为"client"的新套接字对象。
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
##连接服务器,客户端套接字连接到指定的目标主机和端口。
client.connect((target_host,target_port))
##发送GET请求
client.send(b"GET / HTTP/1.1rnHost: baidu.comrnrn")
##接收并打印响应,客户端接收来自服务器的响应(最多4096字节)并打印解码后的响应(假设它是可打印格式)。
response = client.recv(4096)
##关闭套接字
print(response.decode())
client.close()
这个脚本实质上建立了一个TCP连接到www.baidu.com的80端口,发送一个简单的GET请求,接收并打印响应。请注意,着只是一个基本示例,可能不能处理潜在错误或复杂的HTTP响应。
三、UDP客户端
UDP与TCP相差不大,只需要做一些小小的改动就行了
import socket ##导入socket模块
##设置目标主机与端口
target_host = "127.0.0.1"
target_port = 80
##创建udp套字节,这里使用socket.socket()创建一个UDP套接字。AF_INET表示IPv4地址或主机名,SOCK_DGRAM表示UDP套接字。
client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
##发送数据,使用sendto方法发送数据到指定的目标主机和端口。b"AAABBBCCC"是要发送的数据,是一个字节串。
client.sendto(b"AAABBBCCC",(target_host,target_port))
##接收数据,使用recvfrom方法接收数据。4096是接收的最大字节数。接收到的数据和远程地址存储在data和addr中。
data, addr = client.recvfrom(4096)
##打印接收的数据
print(data.decode())
##关闭套字节
client.close()
四、TCP服务端
##导入模块,导入了 Python 内置的 socket 和 threading 模块,用于网络编程和多线程操作。
import socket
import threading
##设置服务器的IP和端口
IP = "0.0.0.0"
PORT = 9998
##定义函数main,在main()函数中,创建了一个TCP套接字并将其绑定到指定的IP和端口。然后通过循环接受客户端连接,并为每个连接创建一个新的线程。
def main():
#创建套接字
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#绑定IP和端口
server.bind((IP,PORT))
#监听连接
server.listen(5)
print(f'[*]Listening on {IP}:{PORT}')
while True:
#接收客户端连接
client, address = server.accept()
print(f'[*] Accepted connection from {address[0]}:{address[1]}')
#创建线程处理客户端连接
client_handler = threading.Thread(target=handler_client, args=(client,))
client_handler.start()
##定义处理客户端连接的函数handler_client,handler_client函数用于处理客户端连接。它接收客户端套接字作为参数,接收客户端发送的数据,打印接收到的数据并发送一个简单的确认消息。
def handler_client(client_socket):
with client_socket as sock:
request = sock.recv(1024)
print(f'[*] Received: {request.decode("utf-8")}')
sock.send(b'Thank you')
##启动服务器的主函数
if __name__== '__main__':
main()
可以使用之前的tcp客服端连接服务端进行一个测试
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...