如果主机名与正则表达式匹配,如何使用 mitmproxy 插件过滤对主机的请求?

How to filter a request for a host with mitmproxy addon if its hostname match a regex?

我想实现一个插件来过滤和删除对一组域的所有请求。所有域都必须与以下正则表达式匹配:

a-.+\.xxxx\.com

我不知道如何获取请求主机名:

if re.match("a-.+\.xxxx\.com", flow.request.hostname):
     # Do something

在mitmproxy中,下面class用于封装请求信息:

mitmproxy.net.http.Request

Request class 的承包商是:

def __init__(
        self,
        host: str,
        port: int,
        method: bytes,
        scheme: bytes,
        authority: bytes,
        path: bytes,
        http_version: bytes,
        headers: Union[Headers, Tuple[Tuple[bytes, bytes], ...]],
        content: Optional[bytes],
        trailers: Union[None, Headers, Tuple[Tuple[bytes, bytes], ...]],
        timestamp_start: float,
        timestamp_end: Optional[float],
):

因此,主机和端口在平台的某处被传递给 class 实例。

实现使用一个数据class来存储数据:

@dataclass
class RequestData(message.MessageData):
    host: str
    port: int
    method: bytes
    scheme: bytes
    authority: bytes
    path: bytes

因此,访问请求主机名:

if re.match("a-.+\.xxxx\.com", flow.request.data.host):
     # Do something

将以下方法直接添加到请求中 class:

一个getter

@property
def host(self) -> str:

一个setter

@host.setter
def host(self, val: Union[str, bytes]) -> None:

所以下面的代码也是可以接受的:

if re.match("a-.+\.xxxx\.com", flow.request.host):
     # Do something