正在寻找一种使用FlaskAPI发送选择性url的tcp重置的方法

正在寻找一种使用FlaskAPI发送选择性url的tcp重置的方法,flask,tcp,flask-restful,Flask,Tcp,Flask Restful,我正在寻找使用FlaskAPI为选择性url发送TCP重置的方法。 例如: 请让我知道我们是否可以使用flask API实现这一点? 我们可以使用任何其他工具来实现这一点。非常感谢您的帮助。请查看Python Sicket文档 我认为您可以发送一个TCP重置,如下所示: 目前无法从flask应用程序本身获取flask的连接套接字对象 从我对flask的套接字的了解来看,似乎我们可以为werkzeug.service.BaseWSGIServer设置套接字的文件描述符 另一个问题是 因此,我能够将

我正在寻找使用FlaskAPI为选择性url发送TCP重置的方法。 例如:

请让我知道我们是否可以使用flask API实现这一点?
我们可以使用任何其他工具来实现这一点。非常感谢您的帮助。

请查看Python Sicket文档

我认为您可以发送一个TCP重置,如下所示:


目前无法从flask应用程序本身获取flask的连接套接字对象

从我对flask的套接字的了解来看,似乎我们可以为
werkzeug.service.BaseWSGIServer
设置套接字的文件描述符

另一个问题是

因此,我能够将链接问题的答案组合成如下内容,我使用了默认的werkzeug的wsgi服务器(调用
app.run
时使用的服务器)

导入日志
导入操作系统
导入套接字
导入socketserver
导入结构
从烧瓶导入烧瓶、中止、请求、会话
来自werkzeug.serving导入BaseWSGIServer
logging.basicConfig(级别=logging.DEBUG)
logger=logging.getLogger(_名称__)
app=烧瓶(名称)
sock=socket.socket(socket.AF\u INET,socket.sock\u流)
sock.set_可继承(True)
sock.setsockopt(socket.SOL_socket,socket.SO_REUSEADDR,1)
sock.setsockopt(socket.SOL_socket,socket.SO_LINGER,结构包('ii',1,0))
@app.route(“/hello”)
def hello():
回复“你好”
@app.route(“/bye”)
def bye():
返回“”
如果名称=“\uuuuu main\uuuuuuuu”:
尝试:
绑定到=('127.0.0.1',5000)
sock.bind(绑定到)
短袜,听着
sock_fd=sock.fileno()
logging.info(“Sock FD是{}”.format(Sock_FD))
#在sock\u fd上调用Socket.dup
#并将上下文传递到
#HTTPServer,呈现服务器和sock
#事后无法修补
base_wsgi=BaseWSGIServer(
*绑定到,应用程序,fd=sock\u fd)
base_wsgi.service_ever()
最后:
如果不是袜子,请关闭:
msg=“套接字未关闭,正在关闭。”
sock.close()
其他:
msg=“套接字已关闭。”
logger.info(msg)
使用不同的wsgi后端控制
套接字
&
连接
,可能(也可能不)更容易,也完全可能

结果 通过wireshark进行检查,它现在在每个请求后额外发送RST。所以连接后是自然闭合的翅片


一个问题是RST无法控制-这基本上通过
扩展了套接字,因此_LINGER
选项导致在连接关闭时始终发送RST。要允许选择性RST发送,必须将基础
连接
(从
sock
创建)传播到端点,然后在该连接上设置sockoptions并关闭它-这也可能导致基础Web服务器失败

这看起来很接近解决问题的核心,但它如何处理多个并发用户呢?您将如何将套接字转发到请求?如果没有这一部分,它在“现实生活”中就不是很有用(我个人正在创建一个模拟服务,希望能够偶尔模拟错误,不确定最初的问题是否有类似的用例)
        GET url1 -> sends 200 OK,
        GET url2 ->  sends TCP reset,
        GET url3 -> sends 200 OK,
        GET url4 -> sends TCP reset
def client(host, port):
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)
    s.connect((host, port))
    l_onoff = 1                                                                                                                                                           
    l_linger = 0                                                                                                                                                          
    s.setsockopt(socket.SOL_SOCKET, socket.SO_LINGER,                                                                                                                     
                 struct.pack('ii', l_onoff, l_linger))
    # send data here
    s.close()