zoukankan      html  css  js  c++  java
  • python入门第二十七天——远程执行命令

     1 #!/usr/bin/env python3
     2 #-*- coding:utf-8 -*-
     3 '''
     4 Administrator 
     5 2018/8/1 
     6 '''
     7 import socket
     8 # 创建一个socket:
     9     #family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None
    10     #创建Socket时,AF_INET指定使用IPv4协议,
    11     # 如果要用更先进的IPv6,就指定为AF_INET6
    12     # AF_UNIX Unix不同进程之间的通信
    13     #  SOCK_STREAM指定使用面向流的TCP协议 SOCK_DGRAM UDP协议
    14 s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    15 print(s)
    16 address=('127.0.0.1',8000)
    17 #建立连接
    18 s.bind(address)
    19 #监听设置端口等待客户端的请求数量
    20 s.listen(3)
    21 
    22 
    23 print('等待...........')
    24 #accept 阻塞
    25 ###不允许发送空
    26 while True:
    27     # accept 阻塞
    28     conn, addr = s.accept()
    29     print(addr)
    30     while True:
    31         try:
    32             data = conn.recv(1024)
    33         except Exception:
    34             break
    35         if not data:
    36             conn.close()
    37             break
    38         print(data.decode("utf-8"))
    39 
    40         inp=input(">>>")
    41         conn.send(inp.encode('utf-8'))
    不间断聊天
     1 #!/usr/bin/env python3
     2 #-*- coding:utf-8 -*-
     3 '''
     4 Administrator 
     5 2018/8/1 
     6 '''
     7 import socket
     8 
     9 sck=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    10 print(sck)
    11 address=('127.0.0.1',8000)
    12 sck.connect(address)
    13 while True:
    14     inp = input(">>>")
    15     if inp == 'exit':
    16         break
    17     sck.send(inp.encode('utf-8'))
    18 
    19     data=sck.recv(1024)
    20     print(data.decode("utf-8"))
    21 
    22 
    23 sck.close()
    不间断聊天——client
     1 #!/usr/bin/env python3
     2 #-*- coding:utf-8 -*-
     3 '''
     4 Administrator 
     5 2018/8/1 
     6 '''
     7 import subprocess
     8 
     9 import socket
    10 
    11 # 创建一个socket:
    12     #family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None
    13     #创建Socket时,AF_INET指定使用IPv4协议,
    14     # 如果要用更先进的IPv6,就指定为AF_INET6
    15     # AF_UNIX Unix不同进程之间的通信
    16     #  SOCK_STREAM指定使用面向流的TCP协议 SOCK_DGRAM UDP协议
    17 s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    18 print(s)
    19 address=('127.0.0.1',8000)
    20 #建立连接
    21 s.bind(address)
    22 #监听设置端口等待客户端的请求数量
    23 s.listen(3)
    24 
    25 
    26 print('等待...........')
    27 #accept 阻塞
    28 ###不允许发送空
    29 while True:
    30     # accept 阻塞
    31     conn, addr = s.accept()
    32     print(addr)
    33     while True:
    34         try:
    35             data = conn.recv(1024)
    36         except Exception:
    37             break
    38         if not data:
    39             conn.close()
    40             break
    41         data=str(data,"utf8")
    42         obj=subprocess.Popen(data,shell=True,stdout=subprocess.PIPE)
    43 
    44         info=obj.stdout.read()#取到执行后得到的结果erjinzhi
    45 
    46         conn.sendall(info)
    47 
    48         #inp=input(">>>")
    49         #conn.send(info.encode('utf-8'))
    cmd_server
     1 #!/usr/bin/env python3
     2 #-*- coding:utf-8 -*-
     3 '''
     4 Administrator 
     5 2018/8/1 
     6 '''
     7 import socket
     8 
     9 sck=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    10 print(sck)
    11 address=('127.0.0.1',8000)
    12 sck.connect(address)
    13 while True:
    14     inp = input(">>>")
    15     if inp == 'exit':
    16         break
    17     sck.send(inp.encode('utf-8'))
    18 
    19     data=sck.recv(1024)#如果超过1024,就会阻塞
    20     for i in data:
    21         print(str(i,"gbk",errors="ignore"))
    22 
    23 
    24 sck.close()
    cmd_client

     1 Windows IP 配置
     2 
     3 
     4 以太网适配器 本地连接:
     5 
     6    连接特定的 DNS 后缀 . . . . . . . : 
     7    本地链接 IPv6 地址. . . . . . . . : fe80::ad1d:5018:876b:3d00%12
     8    IPv4 地址 . . . . . . . . . . . . : 192.168.0.100
     9    子网掩码  . . . . . . . . . . . . : 255.255.255.0
    10    默认网关. . . . . . . . . . . . . : 192.168.0.1
    11 
    12 以太网适配器 VMware Network Adapter VMnet1:
    13 
    14    连接特定的 DNS 后缀 . . . . . . . : localdomain
    15    本地链接 IPv6 地址. . . . . . . . : fe80::58b1:6045:38e4:ad72%15
    16    IPv4 地址 . . . . . . . . . . . . : 192.168.68.1
    17    子网掩码  . . . . . . . . . . . . : 255.255.255.0
    18    默认网关. . . . . . . . . . . . . : 
    19 
    20 以太网适配器 VMware Network Adapter VMnet8:
    21 
    22    连接特定的 DNS 后缀 . . . . . . . : localdomain
    23    本地链接 IPv6 地址. . . . . . . . : fe80::134:8b2e:21e2:7735%16
    24    IPv4 地址 . . . . . . . . . . . . : 192.168.198.1
    25    子网掩码  . . . . . . . . . . . . : 255.255.255.0
    26    默认网关. . . . . . . . . . . . . : 
    27 
    28 隧道适配器 isatap.{7FE544F2-9978-44D8-8B01-FCA6BF7A222D}:
    29 
    30    媒体状态  . . . . . . . . . . . . : 媒体已断开
    31    连接特定的 DNS 后缀 . . . . . . . : 
    32 
    33 隧道适配器 本地连接* 11:
    34 
    35    媒体状态  . . . . . . . . . . . . : 媒体已断开
    36    连接特定的 DNS 后缀 . . . . . . . : 
    37 
    38 隧道适配器 isatap.localdomain:
    39 
    40    媒体状态  . . . . . . . . . . . . : 媒体已断开
    41    连接特定的 DNS 后缀 . . . . . . . : localdomain
    View Code

     完整代码:

     1 #!/usr/bin/env python3
     2 #-*- coding:utf-8 -*-
     3 '''
     4 Administrator 
     5 2018/8/1 
     6 '''
     7 import subprocess
     8 
     9 import socket
    10 
    11 # 创建一个socket:
    12     #family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None
    13     #创建Socket时,AF_INET指定使用IPv4协议,
    14     # 如果要用更先进的IPv6,就指定为AF_INET6
    15     # AF_UNIX Unix不同进程之间的通信
    16     #  SOCK_STREAM指定使用面向流的TCP协议 SOCK_DGRAM UDP协议
    17 s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    18 print(s)
    19 address=('127.0.0.1',8000)
    20 #建立连接
    21 s.bind(address)
    22 #监听设置端口等待客户端的请求数量
    23 s.listen(3)
    24 
    25 
    26 print('等待...........')
    27 #accept 阻塞
    28 ###不允许发送空
    29 while True:
    30     # accept 阻塞
    31     conn, addr = s.accept()
    32     print(addr)
    33     while True:
    34         try:
    35             data = conn.recv(1024)
    36         except Exception:
    37             break
    38         if not data:
    39             conn.close()
    40             break
    41         data=str(data,"utf8")
    42         obj=subprocess.Popen(data,shell=True,stdout=subprocess.PIPE)
    43 
    44         info=obj.stdout.read()#取到执行后得到的结果二进制
    45         result_len=bytes(str(len(info)),"utf8")
    46         conn.send(result_len)
    47 
    48         conn.sendall(info)
    49 
    50         #inp=input(">>>")
    51         #conn.send(info.encode('utf-8'))
    server_cmd
     1 #!/usr/bin/env python3
     2 #-*- coding:utf-8 -*-
     3 '''
     4 Administrator 
     5 2018/8/1 
     6 '''
     7 import socket
     8 
     9 sck=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    10 print(sck)
    11 address=('127.0.0.1',8000)
    12 sck.connect(address)
    13 while True:
    14     inp = input(">>>")
    15     if inp == 'exit':
    16         break
    17     sck.send(inp.encode('utf-8'))
    18     result_len=int(str(sck.recv(1024),"utf-8"))#先接受二进制的长度
    19     print(result_len)
    20     
    21     data=bytes()
    22     while len(data) !=result_len:
    23         recv=sck.recv(1024)
    24         data+=recv
    25     print(str(data,"gbk",errors="ignore"))
    26     #data=sck.recv(result_len)#如果超过1024,就会阻塞
    27     #print(str(data,"gbk",errors="ignore"))
    28 
    29    
    30  #   flage=True
    31  #   while flage:
    32    #     data =None
    33      #   data=sck.recv(1024)#如果超过1024,就会阻塞
    34        # print(str(data,"gbk",errors="ignore"))
    35         
    36         #if not data:
    37           #  flage=False
    38 
    39 
    40 sck.close()
    client_cmd


    沾包现象及解决办法:

     

  • 相关阅读:
    Spring spEL
    Spring 使用外部部署文件
    Spring 自动装配
    spring 属性配置细节
    hdu 1054 Strategic Game
    fzu 2037 Maximum Value Problem
    将博客搬至CSDN
    HDU 4714 Tree2Cycle
    HDU 1009 The Shortest Path in Nya Graph
    POJ 1942 Paths on a Grid 组合数的优化
  • 原文地址:https://www.cnblogs.com/Mengchangxin/p/9401104.html
Copyright © 2011-2022 走看看