🗒️py渗透脚本学习记录01
2023-10-31
| 2023-11-3
字数 1748阅读时长 5 分钟
type
status
date
slug
summary
tags
category
icon
password
😀
简单的python网络编程。csdn学习

1.建立一个对话系统

目的:两部分,一部分为服务端,一部分为客户端,客户端发送请求消息,服务端返回响应消息。
 
代码具体解释见下方文心一言的解释(很详细了,一定看得懂),代码中只有简单解释

服务端:

这段代码是一个简单的网络服务器程序,其主要功能是监听特定端口,接收客户端发送的消息,并根据客户端发送的消息返回相应的回复。
以下是对每行代码的详细解释:
  1. import socket:导入Python的socket模块,该模块提供了用于网络通信的接口。
  1. language = {'name': 'tom', 'age': '25', 'bye': 'bye'}:定义了一个字典,其中包含请求消息和对应的响应消息。例如,当接收到消息'name'时,服务器将返回'tom'。
  1. host = "127.0.0.1":定义服务器绑定的IP地址,这里为本地回环地址127.0.0.1。
  1. port = 6666:定义服务器绑定的端口号,这里为6666。
  1. s = socket.socket(socket.AF_INET, socket.SOCK_STREAM):创建一个TCP套接字并绑定到IP地址和端口号。
    1. socket.AF_INETsocket.SOCK_STREAM都是Python的socket模块中的常量,用于指定socket的类型。
      • socket.AF_INET:这是IPv4网络地址族,它通常用于TCP/IP网络编程。
      • socket.SOCK_STREAM:这是流式套接字类型,它提供了可靠的、双向的字节流。这种类型的套接字通常用于TCP/IP网络连接。
      简单来说,它们一起定义了一个用于TCP连接的IPv4套接字。
  1. s.bind((host, port)):将套接字绑定到之前定义的IP地址和端口号。
  1. s.listen(1):启动服务器以接受客户端的连接请求,参数1表示最大连接数为1。
  1. print("开始监听6666端口"):打印消息表示服务器开始监听6666端口。
  1. conn, addr = s.accept():接受客户端的连接请求,并返回一个新的套接字conn和客户端的地址addr。
    1. accept() 方法是用来接受来自客户端的连接请求的。它阻塞地等待一个连接,直到有客户端连接到指定的服务器端口。返回一个新的套接字对象(conn)和客户端的地址(addr)。
  1. print("连接来自与:", addr):打印消息表示服务器接受了来自客户端的连接。
  1. while True::一个无限循环,用于持续接收和处理客户端的请求。
  1. data = conn.recv(1024):从客户端接收请求数据,最大长度为1024字节。
  1. data = data.decode():将接收到的字节数据解码为字符串。
  1. if not data::如果接收到的数据为空(即客户端关闭了连接),则跳出循环。
  1. print('接收请求消息为:', data):打印消息表示服务器接收到的请求消息。
  1. conn.sendall(language.get(data, 'Nothing').encode()):根据接收到的请求消息,从字典language中获取相应的回复消息,并发送给客户端。如果字典中没有该消息,则返回'Nothing'。
  1. conn.close():关闭与客户端的连接。
  1. s.close():关闭服务器套接字。

客户端:

这段代码是一个简单的Python客户端,用于连接到一个在本地(IP地址为“127.0.0.1”)运行的服务器,端口号为6666。下面是每一行代码的解释:
  1. import socket:导入了Python的socket库,这个库提供了网络通信的功能。
  1. HOST = "127.0.0.1":定义了要连接的服务器的IP地址,这里是本地地址。
  1. PORT = 6666:定义了要连接的服务器的端口号。
  1. s = socket.socket(socket.AF_INET, socket.SOCK_STREAM):创建一个新的socket对象,使用IPv4地址族和TCP协议。
  1. try::开始一个try块,用于捕获可能出现的异常。
  1. s.connect((HOST, PORT)):尝试连接到指定的IP地址和端口号。如果连接失败,将引发异常。
  1. except Exception as e::捕获任何异常,并将其打印出来,然后退出程序。
  1. while True::开始一个无限循环,用于持续接收用户输入并发送到服务器。
  1. c = input('请求参数:'):提示用户输入一个请求参数。
  1. s.sendall(c.encode()):将用户输入的字符串编码为字节,并发送到服务器。
  1. data = s.recv(1024):从服务器接收最多1024个字节的响应。
  1. data = data.decode():将接收到的字节解码为字符串。
  1. print('收到回应:', data):打印从服务器收到的响应。
  1. if c.lower() == '再见'::检查用户输入的参数是否为“再见”。如果是,则跳出循环。
  1. s.close():关闭socket连接。
这个程序是一个简单的TCP客户端示例,用于接收用户输入并发送到服务器,然后打印从服务器收到的响应。当用户输入“再见”时,程序将退出。

结果展示

notion image
notion image

补充

如果客户端不想用本地连接127.0.0.1去连接客户端,而想用电脑地址(比如我是用192.168.245.1)去连接。
而ipconfig中有很多ip,有的是wifi,有的是以太网,有的是适配器。可用以下脚本判断可以用哪个ip来连接
import
socketname = socket.gethostname()
print(name)
host = socket.gethostbyname(name)
print(host)
wifi和以太网的地址可能都不行,会报错
ConnectionRefusedError: [WinError 10061] 由于目标计算机积极拒绝,无法连接。
 
  • 脚本编程
  • vmware虚拟机使用主机clashpy渗透脚本学习02-子域名收集
    Loading...