珠海左右创意园网站开发,注册安全工程师报名条件和要求,客户评价 网站,网站开发详细流程图socket库是Python中用于网络编程的标准库之一#xff0c;它提供了创建套接字#xff08;socket#xff09;对象、绑定地址和端口、监听连接、接受连接、发送和接收数据等功能。
套接字是网络通信的基础#xff0c;它允许程序之间进行数据传输和通信。
套接字类型#xf…socket库是Python中用于网络编程的标准库之一它提供了创建套接字socket对象、绑定地址和端口、监听连接、接受连接、发送和接收数据等功能。
套接字是网络通信的基础它允许程序之间进行数据传输和通信。
套接字类型
SOCK_STREAM流套接字提供面向连接的、可靠的数据传输服务通常用于TCP协议。
SOCK_DGRAM数据报套接字提供无连接的、不可靠的数据传输服务通常用于UDP协议。
SOCK_RAW原始套接字允许直接访问底层协议通常用于网络测试和自定义协议。
地址族
AF_INETIPv4地址族。
AF_INET6IPv6地址族。
AF_UNIXUnix域套接字用于同一台机器上的进程间通信。
套接字方法
socket()创建一个新的套接字对象。
bind()将套接字绑定到指定的地址和端口。
listen()开始监听传入的连接请求仅对SOCK_STREAM类型的套接字有效。
accept()接受一个连接请求并返回一个新的套接字对象和客户端地址仅对SOCK_STREAM类型的套接字有效。
connect()尝试连接到指定的地址和端口。
send() /send() 和 recv()用于发送和接收数据。
close()关闭套接字。 下面是一个简单的服务器和客户端的示例代码服务器在端口10000上监听连接客户端尝试连接到这个地址和端口。一旦连接建立客户端发送一个消息给服务器服务器收到消息后将其发送回客户端然后连接关闭。
# TCP服务器import socket# 创建一个TCP/IP套接字server_socket socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 绑定到地址和端口bind()server_address (localhost, 10000)server_socket.bind(server_address)# 开始监听连接listen()server_socket.listen(1)while True:# 等待连接accept()print(Waiting for a connection...)connection, client_address server_socket.accept()try:print(Connection from, client_address)# 接收数据recv()data connection.recv(1024)print(Received {!r}.format(data))# {!r} 是一个格式说明符它表示将对象以“repr” (representation) 的形式展示# 返回一个对象的“官方”字符串表示通常可以用来在Python解释器中重新创建该对象# 在字符串格式化中{!r} 告诉 format 方法或 str.format() 方法使用 repr 函数将值转换成字符串if data:# 发送数据回客户端sendall()sent connection.sendall(data)print(Sent {!r}.format(sent))else:print(No data received)finally:# 关闭连接close()connection.close()# # TCP客户端import socket# 创建一个TCP/IP套接字client_socket socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 连接到服务器connect()server_address (localhost, 10000)client_socket.connect(server_address)try:# 发送数据sendall()message This is the message.print(Sending {!r}.format(message))client_socket.sendall(message.encode())# 接收数据recv()data client_socket.recv(1024)print(Received {!r}.format(data.decode()))finally:# 关闭连接close()client_socket.close() 小彩蛋
Scapy和Socket配合使用
Scapy和Socket是Python中常用的两个网络编程库Scapy是一个功能强大的交互式数据包操作程序可以用来发送、嗅探、解析和修改网络数据包而Socket则是一个基础的网络通信接口提供了创建客户端和服务器、发送和接收数据等功能。
要将Scapy和Socket搭配使用通常的做法是使用Socket来建立网络连接或监听端口然后使用Scapy来发送或接收数据包。下面的示例首先使用Socket创建一个TCP连接尝试连接到目标主机的指定端口。然后使用Scapy的SR函数发送一个TCP SYN数据包并等待响应。根据响应结果我们可以判断目标主机是否在监听该端口
from scapy.all import *import socket# 使用Socket创建一个TCP连接target_ip 192.168.1.1target_port 80client_socket socket.socket(socket.AF_INET, socket.SOCK_STREAM)client_socket.connect((target_ip, target_port))# 使用Scapy发送一个TCP SYN数据包
# IP(dsttarget_ip): 创建一个IP层的数据包其中dsttarget_ip表示目标IP地址
# TCP(dporttarget_port, flagsS): 在IP层之上创建一个TCP层的数据包。dporttarget_port指定了目标端口而flagsS表示这是一个SYN标志设置的数据包通常用于TCP三次握手的第一步。
# 使用SR函数发送数据包并接收响应
# 如果目标主机在监听该端口会返回一个SYNACK数据包否则可能会返回一个RST数据包response SR(IP(dsttarget_ip)/TCP(dporttarget_port, flagsS), timeout1) # 检查响应结果if response:# 如果收到SYNACK数据包表示目标主机在监听该端口if response[0].haslayer(TCP) and response[0][TCP].flags 0x12:print(fPort {target_port} is open)else:print(fPort {target_port} is closed)else:print(fNo response from target host)# 关闭Socket连接client_socket.close()