Socket

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)
上一篇
下一篇