Socket
一、Socket
- 针对TCP\IP协议簇进行的程序封装,在windows\Linux均有这样的底层模块
-
客户端程序
def test_client(): # 建立与服务器的连接 s = socket.socket() # 默认使用TCP协议 s.connect(('192.168.101.12',554)) # 参数是元组形式 # 传输数据(收发数据包) content = "hello,world" s.send(content,endode()) # 关闭连接 s.close()
-
服务器端程序
def test_server(): s = socket.socket() s.bind(('192.168.101.11',555)) # 绑定服务器端IP和端口号 s.listen() # 保持对555端口的监听 while True: chanel,client = s.accept() # 接受来自客户端的数据(返回的是元组) message = chanel.recv(l024) print(message.decode())
二、完整全双工交互
-
服务器端程序:
import socket s = socket.socket() # s.bind(('127.0.0.1',6666)) # 只允许本设备访问 s.bind(('0.0.0.0',6666)) # 所有IP地址都可以访问6666端口 s.listen() chanel,client = s.accept() # 无法接受多个客户端 while True: # chanel,client = s.accept() # 此时accept()会进入阻塞状态,需要多线程才正常 receive = chanel.recv(1024).decode() print(f"收到消息{receive}") reply = receive.replace("吗?","!") chanel.send(reply.encode()) # s.close() # 在死循环之后的代码不可执行
-
客户端
import socket s = socket.socket() s.connect(('127.0.0.1',6666)) while True: message = input("请输入消息:") s.send(message.encode()) receive = s.recv(1024) print(f"服务器回复:{receive.decode()}")
三、基于socket的远程木马
-
客户端发送一条特殊字符串,里面包含要执行的命令,让服务器端执行命令并返回结果给客户端
import os os.system("ipconfig") # 利用os.system执行系统指令,并输出结果 eval("print('hello,world')") # 将字符串按照python代码执行 eval("os.system('ipconfig')") result = os.popen("ipconfig").read() # 此方法不会将结果直接输出屏幕,可以赋值 print(result)