codekingpro/portable-devtools
114k
1import ipaddress2import logging3 4from mitmproxy import ctx5from mitmproxy.proxy import mode_specs6 7 8class Block:9 def load(self, loader):10 loader.add_option(11 "block_global",12 bool,13 True,14 """15 Block connections from public IP addresses.16 """,17 )18 loader.add_option(19 "block_private",20 bool,21 False,22 """23 Block connections from local (private) IP addresses.24 This option does not affect loopback addresses (connections from the local machine),25 which are always permitted.26 """,27 )28 29 def client_connected(self, client):30 parts = client.peername[0].rsplit("%", 1)31 address = ipaddress.ip_address(parts[0])32 if isinstance(address, ipaddress.IPv6Address):33 address = address.ipv4_mapped or address34 35 if address.is_loopback or isinstance(client.proxy_mode, mode_specs.LocalMode):36 return37 38 if ctx.options.block_private and address.is_private:39 logging.warning(40 f"Client connection from {client.peername[0]} killed by block_private option."41 )42 client.error = "Connection killed by block_private."43 44 if ctx.options.block_global and address.is_global:45 logging.warning(46 f"Client connection from {client.peername[0]} killed by block_global option."47 )48 client.error = "Connection killed by block_global."49 