Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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)中使用套接字服务器和flask Web服务器时出现地址已在使用错误_Python_Sockets_Flask - Fatal编程技术网

在同一脚本(python)中使用套接字服务器和flask Web服务器时出现地址已在使用错误

在同一脚本(python)中使用套接字服务器和flask Web服务器时出现地址已在使用错误,python,sockets,flask,Python,Sockets,Flask,我在大学学习网络安全,我对恶意软件之类的东西感兴趣。出于好奇,我正试图编写一个僵尸网络+控制服务器来了解它们是如何工作的。我的控制服务器由一个线程、一个套接字服务器和一个用于发出命令的FlaskRESTAPI组成。FlaskAPI在没有运行套接字侦听器的情况下运行良好,反之亦然。但是如果我试图同时运行flask api和套接字侦听器,就会得到已在使用的OSError:[Errno 98]地址 我正在用sock.bind((“0.0.0.0”,6505))绑定我的套接字,并用app.run(“0.

我在大学学习网络安全,我对恶意软件之类的东西感兴趣。出于好奇,我正试图编写一个僵尸网络+控制服务器来了解它们是如何工作的。我的控制服务器由一个线程、一个套接字服务器和一个用于发出命令的FlaskRESTAPI组成。FlaskAPI在没有运行套接字侦听器的情况下运行良好,反之亦然。但是如果我试图同时运行flask api和套接字侦听器,就会得到已在使用的
OSError:[Errno 98]地址

我正在用
sock.bind((“0.0.0.0”,6505))
绑定我的套接字,并用
app.run(“0.0.0.0”,6506)”启动我的flask服务器。

我还使用了sock.setsockopt(socket.SOL\u socket,socket.SO\u REUSEADDR,1)

我尝试过的事情:

  • 将插座和烧瓶更换为不同的端口
  • 在套接字和烧瓶上使用不同的绑定地址(套接字=0.0.0.0,烧瓶=127.0.0.1等)
  • 在本地主机(127.0.0.1)上同时运行(烧瓶和套接字)
  • 正在检查lsof以查看这些端口上是否还有其他运行
  • 杀死所有其他正在运行的python进程
  • 检查重复代码(无dup绑定)
更新:
有些奇怪的事情发生了,如果我先运行flask服务器,就不会出现错误,但是套接字服务器不会启动。但是,如果我首先运行套接字服务器,我会得到错误,并且两个都不会运行

更新2:以下是我的一些代码:

更新3: 我尝试将flask Web服务器移动到线程中并移动套接字侦听器,但似乎Web服务器正在阻止我的侦听器。当我切换它们时,我没有收到任何错误,lsof报告两个端口都有一个python进程在监听它们,我可以连接到Web服务器,但套接字似乎超时,但不是立即超时。套接字肯定在运行,但出于某种原因,它似乎无法运行任何代码。我

更新4:我尝试在设置套接字服务器的函数中放入一些print语句,结果它运行了两次,因为flask服务器自动重新加载!我想我需要禁用自动重新加载,它会解决我的问题

###网站路线###
app=烧瓶(名称)
@app.route(“/ping”,方法=[“POST”])
定义ping():
返回“假平”
sock=socket.socket(socket.AF\u INET,socket.sock\u流)
sock.bind((self.HOST,self.PORT))
sock.setsockopt(socket.SOL_socket,socket.SO_REUSEADDR,1)
短袜,听(0)
sock.settimeout(10)
#处理新客户端连接的线程
侦听线程=线程(目标=侦听)
听一听(thread.start)
app.config[“DEBUG”]=True
应用程序运行(“0.0.0.0”,5407)
顺便说一句,我不在乎我是否以最好的方式做这件事,我只是用这个项目来学习,它毫无意义

我也是个有插座的傻瓜,所以_(ツ)_/“”


我是做错了什么,还是网络有什么我不明白的地方?

flask自动重新加载会导致代码重新启动而不关闭原始套接字,因此套接字试图再次绑定到地址/端口。为了解决此问题,我使用以下方法禁用了重新加载程序:

来自werkzeug.service导入运行\u simple
运行_simple(“0.0.0.0”,5407,应用程序,使用_reloader=False)

烧瓶自动重新加载会导致代码重新启动,而不关闭原始套接字,因此套接字第二次尝试绑定到地址/端口。为了解决此问题,我使用以下方法禁用了重新加载程序:

来自werkzeug.service导入运行\u simple
运行_simple(“0.0.0.0”,5407,应用程序,使用_reloader=False)

在各自的本地主机端口上运行它们,例如127.0.0.1:6000上的套接字和127.0.0.1:5000上的flask/werkzeug服务器,并告诉我们发生了什么。@monsieuralfonse64相同的问题:(您知道是哪一个导致了错误吗?请尝试不同时启动它们,然后查看是否只有在运行第二个时才会出现错误。如果在运行第一个时引发错误,则意味着您的端口上正在运行其他内容。奇怪的事情发生了,如果我先运行flask服务器,则不会出现错误,但套接字服务器不会启动。)。但是,如果我先运行套接字服务器,就会出现错误,并且两个都没有运行。也许套接字启动代码中有一行重复的代码启动了服务器?因此,当您运行它时,它会启动两次,这意味着第二行会引发一个
OSError
。不幸的是,您没有提供太多代码,因此我无法帮助您多运行它们h在他们自己的本地主机端口上,例如127.0.0.1:6000上的套接字和127.0.0.1:5000上的flask/werkzeug服务器,并告诉我们发生了什么。@monsieuralfonse64同样的问题:(您知道是哪一个导致了错误吗?请尝试不同时启动它们,然后查看是否只有在运行第二个时才会出现错误。如果在运行第一个时引发错误,则意味着您的端口上正在运行其他内容。奇怪的事情发生了,如果我先运行flask服务器,则不会出现错误,但套接字服务器不会启动。)。但是,如果我先运行套接字服务器,就会出现错误,并且两个都没有运行。也许套接字启动代码中有一行重复的代码启动服务器?因此,当您运行它时,它会启动两次,这意味着第二行会引发一个
OSError
。不幸的是,您没有提供太多代码,因此我无法为您提供太多帮助