Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python echo输出不断搜索,但从未结束_Python_Python 3.x_Echo_P2p_Botnet - Fatal编程技术网

Python echo输出不断搜索,但从未结束

Python echo输出不断搜索,但从未结束,python,python-3.x,echo,p2p,botnet,Python,Python 3.x,Echo,P2p,Botnet,对于我们的任务,当我们运行我们的小机器人时,它陷入了一个无休止的循环,我们无法让它结束。它所做的只是不断寻找新的机器人,即: Waiting for connection... Enter command: p2p echo Finding another bot... Found bot on port 1338 No bot was listening on port 1338 Found bot on port 1339 No bot was listening on port 1339

对于我们的任务,当我们运行我们的小机器人时,它陷入了一个无休止的循环,我们无法让它结束。它所做的只是不断寻找新的机器人,即:

Waiting for connection...
Enter command: p2p echo
Finding another bot...
Found bot on port 1338
No bot was listening on port 1338
Found bot on port 1339
No bot was listening on port 1339
Found bot on port 1340
No bot was listening on port 1340
Found bot on port 1341
No bot was listening on port 1341
Found bot on port 1342
代码如下

import socket
import threading

from lib.comms import StealthConn
from lib.files import p2p_download_file

# Keep track of where our server is
# This is primarily so we don't try to talk to ourselves
server_port = 1337

def find_bot():
    print("Finding another bot...")
    port = 1337
    conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    while 1:
        if port == server_port:
            # Don't connect to yourself, silly bot!
            port += 1
        else:
            try:
                print("Found bot on port %d" % port)
                conn.connect(("localhost", port))
                sconn = StealthConn(conn, client=True)
                return sconn
            except socket.error:
                print("No bot was listening on port %d" % port)
                port += 1

def echo_server(sconn):
    while 1:
        data = sconn.recv()
        print("ECHOING>", data)
        sconn.send(data)
        if data == b'X' or data == b'exit' or data == b'quit':
            print("Closing connection...")
            sconn.close()
            return

def accept_connection(conn):
    try:
        sconn = StealthConn(conn, server=True)
        # The sender is either going to chat to us or send a file
        cmd = sconn.recv()
        if cmd == b'ECHO':
            echo_server(sconn)
        elif cmd == b'FILE':
            p2p_download_file(sconn)
    except socket.error:
        print("Connection closed unexpectedly")

def bot_server():
    global server_port
    # Every bot is both client & server, so needs to listen for
    # connections. This is to allow for peer to peer traffic.
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # Real worms use shifting ports but for simplicity, we won't.
    # We'll also assume you may run another bot on your computer
    # so if something else is using 1337, we'll keep going up.
    while True:
        try:
            s.bind(("localhost", server_port))
            print("Listening on port %d" % server_port)
            break
        except socket.error:
            # Someone is already using that port -- let's go up one
            print("Port %d not available" % server_port)
            server_port += 1
    s.listen(5)

    while 1:
        print("Waiting for connection...")
        conn, address = s.accept()
        print("Accepted a connection from %s..." % (address,))
        # Start a new thread per connection
        # We don't need to specify it's a daemon thread as daemon status is inherited
        threading.Thread(target=accept_connection, args=(conn,)).start()

环顾四周,似乎找不到类似的东西。

您的try except出现异常

        try:
            print("Found bot on port %d" % port)
            conn.connect(("localhost", port))
            sconn = StealthConn(conn, client=True)
            return sconn
        except socket.error:
            print("No bot was listening on port %d" % port)
            port += 1
在尝试连接到bot之前,请打印出“find bot”部分。
print(“在端口%d“%port”上找到bot)
return sconn
之间的某个地方出现异常。您没有点击返回语句,因此是无限循环<代码>而始终为真

假设如果你找到一个机器人,sconn会返回一些值,你只需要重新安排事情

        try:
            conn.connect(("localhost", port))
            sconn = StealthConn(conn, client=True)
            if sconn: # Check for a return value that makes sense whatever
                      # StealthConn is
                print("Found bot on port %d" % port)
                return sconn
        except socket.error:
            print("No bot was listening on port %d" % port)
            port += 1

您在尝试例外时遇到异常

        try:
            print("Found bot on port %d" % port)
            conn.connect(("localhost", port))
            sconn = StealthConn(conn, client=True)
            return sconn
        except socket.error:
            print("No bot was listening on port %d" % port)
            port += 1
在尝试连接到bot之前,请打印出“find bot”部分。
print(“在端口%d“%port”上找到bot)
return sconn
之间的某个地方出现异常。您没有点击返回语句,因此是无限循环<代码>而始终为真

假设如果你找到一个机器人,sconn会返回一些值,你只需要重新安排事情

        try:
            conn.connect(("localhost", port))
            sconn = StealthConn(conn, client=True)
            if sconn: # Check for a return value that makes sense whatever
                      # StealthConn is
                print("Found bot on port %d" % port)
                return sconn
        except socket.error:
            print("No bot was listening on port %d" % port)
            port += 1