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