[common] support multiple codes/blocks for '--xff'
for example '--xff JP,CN,105.48.0.0/12'
This commit is contained in:
@@ -973,21 +973,24 @@ Description
|
|||||||
extractor.*.geo-bypass
|
extractor.*.geo-bypass
|
||||||
----------------------
|
----------------------
|
||||||
Type
|
Type
|
||||||
``string``
|
* ``string``
|
||||||
|
* ``list`` of ``string``
|
||||||
Default
|
Default
|
||||||
``"auto"``
|
``"auto"``
|
||||||
Example
|
Example
|
||||||
* ``"JP"``
|
* ``"JP"``
|
||||||
* ``"105.48.0.0/12"``
|
* ``"105.48.0.0/12"``
|
||||||
|
* ``"JP,CN,105.48.0.0/12"``
|
||||||
|
* ``["JP", "CN", "105.48.0.0/12"]``
|
||||||
Description
|
Description
|
||||||
Use fake IPs as
|
Use a random IP as fake
|
||||||
`X-Forwarded-For <https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-For>`__
|
`X-Forwarded-For <https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-For>`__
|
||||||
header to try bypassing geographic restrictions.
|
header to try bypassing geographic restrictions.
|
||||||
|
|
||||||
| Can be either an
|
| Can be either
|
||||||
`ISO 3166-2 <https://en.wikipedia.org/wiki/ISO_3166-2>`__
|
`ISO 3166-2 <https://en.wikipedia.org/wiki/ISO_3166-2>`__
|
||||||
country code
|
country codes
|
||||||
| or an IP block in CIDR notation.
|
| or IP blocks in CIDR notation.
|
||||||
|
|
||||||
|
|
||||||
extractor.*.headers
|
extractor.*.headers
|
||||||
|
|||||||
@@ -93,9 +93,9 @@
|
|||||||
--http-timeout SECONDS Timeout for HTTP connections (default: 30.0)
|
--http-timeout SECONDS Timeout for HTTP connections (default: 30.0)
|
||||||
--proxy URL Use the specified proxy
|
--proxy URL Use the specified proxy
|
||||||
--xff VALUE Use a fake 'X-Forwarded-For' HTTP header to try
|
--xff VALUE Use a fake 'X-Forwarded-For' HTTP header to try
|
||||||
bypassing geographic restrictions. Can be an IP
|
bypassing geographic restrictions. Can be IP
|
||||||
block in CIDR notation or a two-letter ISO
|
blocks in CIDR notation or two-letter ISO
|
||||||
3166-2 country code
|
3166-2 country codes (12.0.0.0/8,FR,CN)
|
||||||
--source-address IP Client-side IP address to bind to
|
--source-address IP Client-side IP address to bind to
|
||||||
-4, --force-ipv4 Make all connections via IPv4
|
-4, --force-ipv4 Make all connections via IPv4
|
||||||
-6, --force-ipv6 Make all connections via IPv6
|
-6, --force-ipv6 Make all connections via IPv6
|
||||||
|
|||||||
@@ -258,12 +258,21 @@ COUNTRY_IP_MAP = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
def random_ipv4(block):
|
def random_ipv4(blocks):
|
||||||
if len(block) == 2:
|
if isinstance(blocks, str):
|
||||||
block = COUNTRY_IP_MAP.get(block.upper())
|
blocks = blocks.split(",")
|
||||||
if not block:
|
|
||||||
return None
|
|
||||||
|
|
||||||
|
cidr = []
|
||||||
|
for block in blocks:
|
||||||
|
if len(block) == 2:
|
||||||
|
block = COUNTRY_IP_MAP.get(block.upper())
|
||||||
|
if not block:
|
||||||
|
continue
|
||||||
|
cidr.append(block)
|
||||||
|
if not cidr:
|
||||||
|
return None
|
||||||
|
|
||||||
|
block = random.choice(cidr)
|
||||||
addr, _, preflen = block.partition("/")
|
addr, _, preflen = block.partition("/")
|
||||||
if not preflen:
|
if not preflen:
|
||||||
return addr
|
return addr
|
||||||
|
|||||||
@@ -494,8 +494,8 @@ def build_parser():
|
|||||||
"--xff",
|
"--xff",
|
||||||
dest="geo-bypass", metavar="VALUE", action=ConfigAction,
|
dest="geo-bypass", metavar="VALUE", action=ConfigAction,
|
||||||
help=("Use a fake 'X-Forwarded-For' HTTP header to try bypassing "
|
help=("Use a fake 'X-Forwarded-For' HTTP header to try bypassing "
|
||||||
"geographic restrictions. Can be an IP block in CIDR notation "
|
"geographic restrictions. Can be IP blocks in CIDR notation "
|
||||||
"or a two-letter ISO 3166-2 country code")
|
"or two-letter ISO 3166-2 country codes (12.0.0.0/8,FR,CN)")
|
||||||
)
|
)
|
||||||
networking.add_argument(
|
networking.add_argument(
|
||||||
"--source-address",
|
"--source-address",
|
||||||
|
|||||||
Reference in New Issue
Block a user