白客小李666 2022-10-23 13:48 采纳率: 75%
浏览 25
已结题

编好啦,可是又报错了

程序编好了,但是又报错了,大家帮忙看看(呜)
代码:

import argparse
import socket
import shlex
import subprocess
import sys
import textwrap
import threading

def execute(cmd):
    cmd=cmd.strip()
    if not cmd:
        return
    output=subprocess.check_output(shlex.split(cmd))
    return output.decode()



class NetCat:
    def __init__(self, args,buffer=None):
        self.args = args
        self.buffer = buffer
        self.socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        self.socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
    def run(self):
        if self.args.listen():
            self.listen()
        self.send()
    def send(self):
        self.socket.connect((self.args.target,self.args.port))
        if self.buffer:
            self.socket.send(self.buffer)
        try:
            while True:
                recv_len=1
                response=''
                while recv_len:
                    data=self.socket.recv(4096)
                    recv_len=len(data)
                    response += data.decode()
                    if recv_len < 4096:
                        break
                if response:
                    print(response)
                    buffer=input('> ')
                    buffer += '\n'
                    self.socket.send(buffer.encode())
        except KeyboardInterrupt:
            print('User terminated')
            self.socket.close()
            sys.exit()
    def listen(self):
        self.socket.bind((self.args.target,self.args.port))
        self.socket.listen(5)
        while True:
            client_socket,_=self.socket.accept()
            client_thread=threading.Thread(
                target=self.handle,args=(client_socket,)
                )
            client_thread.start()
    def handle(self,client_socket):
        if self.args.execute:
            output=execute(self.args.execute)
            client_socket.send(output.encode())
        elif self.args.upload:
            file_buffer=b''
            while True:
                data=client_socket.recv(4096)
                if data:
                    file_buffer += data
                else:
                    break
            with open(self.args.upload,'wb') as f:
                f.write(file_buffer)
            message=f'Saved file {self.args.upload}'
            client_socket.send(message.encode())
        elif self.args.command:
            cmd_buffer=b''
            while True:
                try:
                    client_socket.send(b'BUP: #> ')
                    while '\n' not in cmd_buffer.decode():
                        cmd_buffer += client_socket.recv(64)
                    response=execute(cmd_buffer.decode())
                    if response:
                        client_socket.send(response.encode())
                    cmd_buffer=b''
                except Exception as e:
                    print(f"sever killed {e}")
                    self.socket.close()
                    sys.exit()



if __name__=='__main__':
    parser=argparse.ArgumentParser(
        description='BHP Net Tool',
        formatter_class=argparse.RawDescriptionHelpFormatter,
        epilog=textwrap.dedent('''Example:
            netcat.py -t 39.105.239.170 -p 5555 -l -c # command shell
            netcat.py -t 39.105.239.170 -p 5555 -l -u=mytest.txt # upload to file
            netcat.py -t 39.105.239.170 -p 5555 -l -e=\"cat/etc/passwd\" # execute command
            echo 'ABC' | ./netcat.py -t 39.105.239.170 -p 135 # echo text to sever port 135
            netcat.py -t 39.105.239.170 -p 5555 # connect to sever
            '''))
    parser.add_argument('-c','--command',action='store_true',help='command shell')
    parser.add_argument('-e','--execute',help='execute specified command')
    parser.add_argument('-l','--listen',action='store_true',help='listen')
    parser.add_argument('-p','--port',type=int,default=5555,help='specified port')
    parser.add_argument('-t','--target',default='39.105.239.170',help='specified IP')
    parser.add_argument('-u','--upload',help='load file')
    args=parser.parse_args()
    if args.listen:
        buffer=''
    else:
        buffer=sys.stdin.read()

    nc=NetCat(args,buffer.encode())
    nc.run()



报错:

D:\python\python练习\netcat>netcat.py -t 39.105.239.170 -p 5555 -l -c
Traceback (most recent call last):
  File "D:\python\python练习\netcat\netcat.py", line 118, in <module>
    nc.run()
  File "D:\python\python练习\netcat\netcat.py", line 25, in run
    if self.args.listen():
TypeError: 'bool' object is not callable

请大家看看

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 10月31日
    • 创建了问题 10月23日

    悬赏问题

    • ¥20 python忆阻器数字识别
    • ¥15 无法输出helloworld
    • ¥15 高通uboot 打印ubi init err 22
    • ¥20 PDF元数据中的XMP媒体管理属性
    • ¥15 R语言中lasso回归报错
    • ¥15 网站突然不能访问了,上午还好好的
    • ¥15 有没有dl可以帮弄”我去图书馆”秒选道具和积分
    • ¥15 semrush,SEO,内嵌网站,api
    • ¥15 Stata:为什么reghdfe后的因变量没有被发现识别啊
    • ¥15 振荡电路,ADS仿真