A Python library to utilize AWS API Gateway's large IP pool as a proxy to generate pseudo-infinite IPs for web scraping and brute forcing.

Overview

requests-ip-rotator

A Python library to utilize AWS API Gateway's large IP pool as a proxy to generate pseudo-infinite IPs for web scraping and brute forcing.

This library will allow the user to bypass IP-based rate-limits for sites and services.


Installation

This package is on pypi so you can install via any of the following:

  • pip3 install requests-ip-rotator
  • python3 -m pip install requests-ip-rotator

 

Simple Usage

import requests
from requests_ip_rotator import ApiGateway

# Create gateway object and initialise in AWS
gateway = ApiGateway("https://site.com")
gateway.start()

# Assign gateway to session
session = requests.Session()
session.mount("https://site.com", gateway)

# Send request (IP will be randomised)
response = session.get("https://site.com/index.html")
print(response.status_code)

# Delete gateways
gateway.shutdown()

Please remember that if gateways are not shutdown via the shutdown() method, you may be charged in future.

 

Costs

API Gateway is free for the first million requests per region, which means that for most use cases this should be completely free.
At the time of writing, AWS charges ~$3 per million requests after the free tier has been exceeded.
 

Documentation

AWS Authentication

It is recommended to setup authentication via environment variables. With awscli, you can run aws configure to do this, or alternatively, you can simply set the AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY variables yourself.

You can find your access key ID and secret by following the official AWS tutorial.

 

Creating ApiGateway object

The ApiGateway class can be created with the following optional parameters:

Name Description Required Default
site The site (without path) requests will be sent to. True
regions An array of AWS regions to setup gateways in. False ip_rotator.DEFAULT_REGIONS
access_key_id AWS Access Key ID (will override env variables). False Relies on env variables.
access_key_secret AWS Access Key Secret (will override env variables). False Relies on env variables.
from ip_rotator import ApiGateway, EXTRA_REGIONS, ALL_REGIONS

# Gateway to outbound HTTP IP and port for only two regions
gateway_1 = ApiGateway("http://1.1.1.1:8080", regions=["eu-west-1", "eu-west-2"])

# Gateway to HTTPS google for the extra regions pack, with specified access key pair
gateway_2 = ApiGateway("https://www.google.com", regions=EXTRA_REGIONS, access_key_id="ID", access_key_secret="SECRET")

 

Starting API gateway

An ApiGateway object must then be started using the start method.
By default, if an ApiGateway already exists for the site, it will use the existing endpoint instead of creating a new one.
This does not require any parameters, but accepts the following:

Name Description Required
force Create a new set of endpoints, even if some already exist. False
endpoints Array of pre-existing endpoints (i.e. from previous session). False
# Starts new ApiGateway instances for site, or locates existing endpoints if they already exist.
gateway_1.start()

# Starts new ApiGateway instances even if some already exist.
gateway_2.start(force=True)

 

Sending requests

Requests are sent by attaching the ApiGateway object to a requests Session object.
The site given in mount must match the site passed in the ApiGateway constructor.

If you pass in a X-My-X-Forwarded-For header, this will get sent as X-Forwarded-For in the outbound request.

import requests

# Posts a request to the site created in gateway_1. Will be sent from a random IP.
session_1 = requests.Session()
session_1.mount("http://1.1.1.1:8080", gateway_1)
session_1.post("http://1.1.1.1:8080/update.php", headers={"Hello": "World"})

# Send 127.0.0.1 as X-Forwarded-For header in outbound request.
session_1.post("http://1.1.1.1:8080/update.php", headers={"X-My-X-Forwarded-For", "127.0.0.1"})

# Execute Google search query from random IP
session_2 = requests.Session()
session_2.mount("https://www.google.com", gateway_2)
session_2.get("https://www.google.com/search?q=test")

 

Closing ApiGateway Resources

It's important to shutdown the ApiGateway resources once you have finished with them, to prevent dangling public endpoints that can cause excess charges to your account.
This is done through the shutdown method of the ApiGateway object. It will close all resources for the regions specified in the ApiGateway object constructor.

# This will shutdown all gateway proxies for "http://1.1.1.1:8080" in "eu-west-1" & "eu-west-2"
gateway_1.shutdown()

# This will shutdown all gatewy proxies for "https://www.google.com" for all regions in ip_rotator.EXTRA_REGIONS
gateway_2.shutdown()

Credit

The core gateway creation and organisation code was adapter from RhinoSecurityLabs' IPRotate Burp Extension.
The X-My-X-Forwarded-For header forwarding concept was originally conceptualised by ustayready in his fireprox proxy.

Comments
  • send() not printing out to console

    send() not printing out to console

    Hello,

    I was tinkering around with send(self, request, ...) in ip_rotator.py and noticed that print statements in the method will not show up. But, print statements in the module's other methods like start() will show in console.

    I assume send(self, request, ...) is being used under the hood? If this is the case, how come the print statements don't show up? Is there any other way way to view details about the request parameter?

    Thanks

    question 
    opened by harhur 15
  • Removed creatation of usage plans as they are not required and were n…

    Removed creatation of usage plans as they are not required and were n…

    There are 3 main changes in this PR. Perhaps I should have separated them out...

    1. Removed creation of usage plan. Isn't required for functioning are we aren't cleaning up. 300 limit on usage policy

    2. added modify_request_dict which allows passing in a dict that defines a request to be modified for use with the API Gateway. This change allowed me to easily implement an async scraper.

    3. Project was previously ignoring query string paramaters in request if path was empty. Params are now explicitly extracted and appended to params to request object.

    opened by harryslimes 9
  • Recurring 403 error

    Recurring 403 error

    Just discovered this package and it has huge promise, however I'm not sure if something on AWS has changed since the last release.

    Using the below code i always get a 403 response.

    import requests
    from requests_ip_rotator import ApiGateway
    
    gateway = ApiGateway(
        "https://www.google.com",
        regions=['eu-west-1', 'eu-west-2', 'eu-west-3'],
        access_key_id="MY_KEY",
        access_key_secret="MY_SECRET"
        )
    gateway.start()
    
    session = requests.Session()
    session.mount("https://www.google.com", gateway)
    response = session.get("https://www.google.com/search?q=random+search")
    print(response.status_code)
    
    question 
    opened by cia05rf 6
  • TooManyRedirects: Exceeded 30 redirects.

    TooManyRedirects: Exceeded 30 redirects.

    import requests
    from requests_ip_rotator import ApiGateway, EXTRA_REGIONS
    
    gateway = ApiGateway("https://spare.avspart.com/", access_key_id = 'my key', access_key_secret = 'my secret key')
    gateway.start()
    
    session = requests.Session()
    session.mount("https://spare.avspart.com/", gateway)
    
    response = session.get("https://spare.avspart.com/catalog/case/64848/4534337/677993/")
    print(response.status_code)
    
    gateway.shutdown()
    

    When I try and send a request to the page I get this error. Not sure what's happening?

    Starting API gateways in 10 regions.
    Using 10 endpoints with name 'https://spare.avspart.com/ - IP Rotate API' (10 new).
    Traceback (most recent call last):
      File "test.py", line 16, in <module>
        response = session.get("https://spare.avspart.com/catalog/case/64848/4534337/677993/")
      File "/mnt/c/Users/hewin/Downloads/Asyncio/.venv/lib/python3.8/site-packages/requests/sessions.py", line 555, in get
        return self.request('GET', url, **kwargs)
      File "/mnt/c/Users/hewin/Downloads/Asyncio/.venv/lib/python3.8/site-packages/requests/sessions.py", line 542, in request
        resp = self.send(prep, **send_kwargs)
      File "/mnt/c/Users/hewin/Downloads/Asyncio/.venv/lib/python3.8/site-packages/requests/sessions.py", line 677, in send
        history = [resp for resp in gen]
      File "/mnt/c/Users/hewin/Downloads/Asyncio/.venv/lib/python3.8/site-packages/requests/sessions.py", line 677, in <listcomp>
        history = [resp for resp in gen]
      File "/mnt/c/Users/hewin/Downloads/Asyncio/.venv/lib/python3.8/site-packages/requests/sessions.py", line 166, in resolve_redirects
        raise TooManyRedirects('Exceeded {} redirects.'.format(self.max_redirects), response=resp)
    requests.exceptions.TooManyRedirects: Exceeded 30 redirects.
    
    opened by DLHTurboDieselLtd 6
  • 403: forbidden

    403: forbidden

    I am experiencing a strange situation:

    • when making requests here: https://www.zillow.com/homes/Miami.dash.Dade-County,-FL_rb/ everything goes correctly
    • when i try to make a request here instead : https://www.zillow.com/homedetails/14851-SW-150th-St-Miami-FL-33196/44327576_zpid/ I get this: {"message":"Forbidden"}

    I know it has to be something related to headers because if i dont use any header I always get 403, but even using headers in the second link i cant get a 200 response. I dont know if something like this has happened to any of you. If someone knows the issue i would appreciate a lot if they let me know. Thank you!

    question 
    opened by jherrerogb98 5
  • Batch opening and closing gateways?

    Batch opening and closing gateways?

    Hello sir, very nice module :)

    I am trying to make it nicer by speeding up closing and opening of gateways. Current implementation uses:

    apis = awsclient.get_rest_apis()["items"] // to get the ids to close and, lists max 20 awsclient.delete_rest_api(restApiId=api["id"]) // to actually close it

    Which works fine, unless you have to close 600 gateways which easily takes half an hour and you have to recursively call get_rest_apis(), because it lists only 20

    The same problem happens with opening gateways. Opening gateways for 10 domains takes around 30s. I am attaching the relevant code from the project:

        `# Create simple rest API resource
        create_api_response = awsclient.create_rest_api(
            name=self.api_name,
            endpointConfiguration={
                "types": [
                    "REGIONAL",
                ]
            }
        )
    
        # Get ID for new resource
        get_resource_response = awsclient.get_resources(
            restApiId=create_api_response["id"]
        )
        rest_api_id = create_api_response["id"]
    
        # Create "Resource" (wildcard proxy path)
        create_resource_response = awsclient.create_resource(
            restApiId=create_api_response["id"],
            parentId=get_resource_response["items"][0]["id"],
            pathPart="{proxy+}"
        )
    
        # Allow all methods to new resource
        awsclient.put_method(
            restApiId=create_api_response["id"],
            resourceId=get_resource_response["items"][0]["id"],
            httpMethod="ANY",
            authorizationType="NONE",
            requestParameters={
                "method.request.path.proxy": True,
                "method.request.header.X-My-X-Forwarded-For": True
            }
        )
    
        # Make new resource route traffic to new host
        awsclient.put_integration(
            restApiId=create_api_response["id"],
            resourceId=get_resource_response["items"][0]["id"],
            type="HTTP_PROXY",
            httpMethod="ANY",
            integrationHttpMethod="ANY",
            uri=self.site,
            connectionType="INTERNET",
            requestParameters={
                "integration.request.path.proxy": "method.request.path.proxy",
                "integration.request.header.X-Forwarded-For": "method.request.header.X-My-X-Forwarded-For"
            }
        )
    
        awsclient.put_method(
            restApiId=create_api_response["id"],
            resourceId=create_resource_response["id"],
            httpMethod="ANY",
            authorizationType="NONE",
            requestParameters={
                "method.request.path.proxy": True,
                "method.request.header.X-My-X-Forwarded-For": True
            }
        )
    
        awsclient.put_integration(
            restApiId=create_api_response["id"],
            resourceId=create_resource_response["id"],
            type="HTTP_PROXY",
            httpMethod="ANY",
            integrationHttpMethod="ANY",
            uri=f"{self.site}/{{proxy}}",
            connectionType="INTERNET",
            requestParameters={
                "integration.request.path.proxy": "method.request.path.proxy",
                "integration.request.header.X-Forwarded-For": "method.request.header.X-My-X-Forwarded-For"
            }
        )
    
        # Creates deployment resource, so that our API to be callable
        awsclient.create_deployment(
            restApiId=rest_api_id,
            stageName="ProxyStage"
        )
    
        # Return endpoint name and whether it show it is newly created
        return {
            "success": True,
            "endpoint": f"{rest_api_id}.execute-api.{region}.amazonaws.com",
            "new": True
        }`
    

    Is it possible to perform opening and closing tasks in batch?

    question 
    opened by mittster 5
  • URL Encoding Not as Expected

    URL Encoding Not as Expected

    I have been attempting to use this package to scrape Google News - I am using the most recent release (v1.0.10), and have configured the AWS-CLI. The exact code sequence resulting in a failure is as follows:

    1. Get blocked by Google :) (run this, and you'll likely be blocked after 750 to 1000 requests)
    import requests
    for i in range(1,10000):
        response = requests.get("http://www.google.com/search?q=barry+bonds after:2021-12-22 before: 2021-12-23&tbm=nws&hl=en&num=10")
        if response.status_code != 200:
            print(i)
            print(response.status_code)
            break
    
    1. After getting blocked on my IP, I should still be able to access google using the module (i.e. after running the above block, I should be able to run the below block, and get a 200 response).
    with ApiGateway("https://google.com") as g:
        session = requests.Session()
        session.mount("https://google.com", g)
        response = session.get("http://www.google.com/search?q=elon+musk after:2021-12-22 before:    2021-12-23&tbm=nws&hl=en&num=10")
        print(response.status_code)
    

    Unfortunately, the result is a 429 response for me ... on the other hand, when I tried using a proxy from scrapingbee.com after initially getting blocked by Google (performing step 1), I actually did get a 200 response. I configured the AWS CLI, and I also tried inputting the keys as arguments and creating new users with the API Gateway enabled, as well as using the root key, but have had no luck.

    Screen Shot 2021-12-24 at 5 26 40 PM

    Are you able to replicate this issue/first artificially block yourself from Google, and then being unable to scrape using this ip-rotator module? Thank you very much for an excellent module, and Merry Christmas and happy holidays!

    bug 
    opened by hariravi 5
  • how to check if its working

    how to check if its working

    hi, im running the request ip rotator in a while infinite loop. But i dont know if its really working, is it sending requests with different ip, how can i check that? im asking because i see in the terminal "IP Rotate API' (0 new)"

    "Starting API gateways in 17 regions. Using 17 endpoints with name 'https://www.google.com - IP Rotate API' (0 new). running #3 - Status code: 200 - Host: 2000qnx4dm5b6.execute-api.us-east-1.amazonaws.com - Request headers X-My-X-Forwarded-For: XX.XXX.XXX.XX"

    why do i see 0 new?

    question 
    opened by AlexWayne20 5
  • How I can bypass cloudflare?

    How I can bypass cloudflare?

    The site has Cloudflare protection to bypass it as I know I need to spoof tls fingerprint. How I can change tls fingerprint with code or in aws? Or mb there is another method to bypass it?

    opened by MsLolita 4
  • Add pagination to gateway getting

    Add pagination to gateway getting

    When there are many gateways on an account / region and the relevant ones aren't on the first page (25 per page) they start to accumulate since they may not be found to be deleted.

    bug 
    opened by RobertLucey 4
  • Unable to download video

    Unable to download video

    If you try to view a video, the response has status code 500 with message {"message": "Internal server error"}

    You can try it out with this sample:

    if __name__ == '__main__':
        gateway = ApiGateway("https://video.xx.fbcdn.net", regions=["regionhere"], access_key_id=ACCESS_KEY_ID, access_key_secret=ACCESS_KEY_SECRET)
        gateway.start()
    
        session = requests.Session()
        session.mount("https://video.xx.fbcdn.net", gateway)
    
        response = session.get("https://video.xx.fbcdn.net/v/t66.36240-2/10000000_5162062970516874_3952172667405771162_n.mp4?_nc_cat=110&_nc_ht=video.fmnl8-2.fna&_nc_ohc=RuGOgev5TvEAX8FI4Hk&_nc_sid=985c63&ccb=1-7&efg=eyJybHIiOjIzNzQsInJsYSI6MTc5MSwidmVuY29kZV90YWciOiJvZXBfaGQifQ%3D%3D&oe=628E6A4A&oh=00_AT__3AG9wy4Vz9QqimNjwzLTspBsfs0E5-VyVRaLCqGAUw&rl=2374&vabr=1583")
        print(response.status_code) // this prints 500
    
        # Delete gateways
        gateway.shutdown()
    

    Also tried with: -https://previews.customer.envatousercontent.com/h264-video-previews/34bc5a70-9db3-4ee9-821d-b4304d0c5dc5/33244341.mp4

    Any idea whats going on? It seems that default aws gateway configuration does not support video.

    bug 
    opened by mittster 3
  • API Gateway Converting

    API Gateway Converting "%2f" to "/" in URL Parameter

    Hello @Ge0rg3! Thank you for putting together this library. It was proven to be effective over months of use.

    However I'd like to report that some urls fail to fetch due to, at least I think so, how API Gateway is constructed. Take a look at this url for example:

    https://scontent.xx.fbcdn.net/v/t39.25447-2/315991144_6377206065657734_5025935354679506890_n.mp4?_nc_cat=106&vs=e0ece699e5d69073&_nc_vs=HBksFQAYJEdHaWsxUktHOXpQX0NLZ1dBTXEzdjVlVHRiOUZibWRqQUFBRhUAAsgBABUAGCRHTlI1MVJKU3ZyWjZlYmtFQUM5WExHZ25HS0F6YnJGcUFBQUYVAgLIAQBLB4gScHJvZ3Jlc3NpdmVfcmVjaXBlATENc3Vic2FtcGxlX2ZwcwAQdm1hZl9lbmFibGVfbnN1YgAgbWVhc3VyZV9vcmlnaW5hbF9yZXNvbHV0aW9uX3NzaW0AKGNvbXB1dGVfc3NpbV9vbmx5X2F0X29yaWdpbmFsX3Jlc29sdXRpb24AHXVzZV9sYW5jem9zX2Zvcl92cW1fdXBzY2FsaW5nABFkaXNhYmxlX3Bvc3RfcHZxcwAVACUAHAAAJtLalcytxbYCFQIoAkMzGAt2dHNfcHJldmlldxwXQDQaXjU%2FfO4YIGRhc2hfdjRfNXNlY2dvcF9ocTFfZnJhZ18yX3ZpZGVvEgAYGHZpZGVvcy52dHMuY2FsbGJhY2sucHJvZDgSVklERU9fVklFV19SRVFVRVNUGwqIFW9lbV90YXJnZXRfZW5jb2RlX3RhZwZvZXBfaGQTb2VtX3JlcXVlc3RfdGltZV9tcwEwDG9lbV9jZmdfcnVsZQd1bm11dGVkE29lbV9yb2lfcmVhY2hfY291bnQGMTA5NTIxEW9lbV9pc19leHBlcmltZW50AAxvZW1fdmlkZW9faWQPNDcwODM4MDA1MTIwMzYxEm9lbV92aWRlb19hc3NldF9pZBAxMDk3NTM2MDE3NjIxNjU2FW9lbV92aWRlb19yZXNvdXJjZV9pZA82ODI4ODg3Mzk4NjIxODUcb2VtX3NvdXJjZV92aWRlb19lbmNvZGluZ19pZA81MTk4NzQyODMzNjkyNTEOdnRzX3JlcXVlc3RfaWQAJQIcACWOAhsIiAFzAzYzOAJjZAoyMDIyLTExLTE4A3JjYgYxMDk1MDADYXBwDFBvd2VyIEVkaXRvcgJjdBlDT05UQUlORURfUE9TVF9BVFRBQ0hNRU5UE29yaWdpbmFsX2R1cmF0aW9uX3MJMjAuMTM4NjY3AWYCYWQCdHMVcHJvZ3Jlc3NpdmVfZW5jb2RpbmdzAA%3D%3D&ccb=1-7&_nc_sid=4ea082&efg=eyJ2ZW5jb2RlX3RhZyI6Im9lcF9oZCJ9&_nc_ohc=Cfpbu-XsZBsAX87uM0c&_nc_ht=scontent.fltn3-2.fna&oh=00_AfAJY6nikmbiUBPnm8G-_aKrghM7WeryZX3b0Sk4zrarZw&oe=63A51240&_nc_rid=089394793026750

    You can copy paste this url to browser and it plays as it should. However if you make a request via API Gateway, you will get URL signature mismatch error. That is the error you get from fbcdn when the url is malformed. This is a video, so you will also need to send a Range header.

    url = "URL above"
    headers["Range"] = f"bytes=0-9999999"
     with current_session.get(url, stream=True, headers=headers, allow_redirects=False) as response:
            with open(location["absolute_output_file"], 'wb') as f:
                for chunk in response.iter_content(chunk_size=8192):
                    f.write(chunk)
    

    I tried escaping % by replacing them with %25, but it didn't work. Passing URL(url) as request url also didn't work. I uploaded a media file on a server and used a name with %, if fetched normally so I am not sure what is the cause for a problem here. If the url is expired when you see this, I'll supply a new one. Thanks for your help.

    bug help wanted 
    opened by mittster 3
  • Does API Gateway charge for 4XX/5XX errors?

    Does API Gateway charge for 4XX/5XX errors?

    Hi All -

    Great project!

    Just started testing this repo but it looks like CloudWatch stats are delayed.

    I'm wondering if anyone knows whether the API Gateway charges for failed (4XX/5XX) requests?

    I believe it does, but just want to be sure.

    Thanks!

    opened by codemonies 0
  • REST vs HTTP Api

    REST vs HTTP Api

    Hey there, thanks a lot for this great lib! I noticed that it uses the REST api. Would it theoretically be possibe to use the HTTP Api, which is only 1/3 the price?

    enhancement 
    opened by simplexx 14
  • aiohttp-ip-rotator

    aiohttp-ip-rotator

    Hey, I am back again:) I was happily parsing last few days away, blew past the free tier already, but I wanted to scale up my operation further to make it even faster. I am limited with max 60 workers in the pool, so I decided to rewrite it from multiprocessing to asynchronous concurrency. This is where I realized that I can't use Requests module, but your module was made to work only with Requests.

    How difficult would it be to rewrite it to make it compatible with aiohttp? Is there any way to make it work with requests, even thou the module is inherently blocking at the sockets level? The higher latency, the more beneficial would it be to move this work from multiprocessing to asynchronous loop. I could try to work on it, but I am new to python so I appreciate any kind of feedback or advice you can give me.

    I just found Dask and am looking into it, if it could help me keep using Requests. Another possibility is to rent a server that has enough virtual cores to go beyond 60 workers.

    enhancement help wanted 
    opened by vincenthawke 9
Releases(v1.0.14)
  • v1.0.14(Oct 27, 2022)

    What's Changed

    • Add Option to Require Manual Deletion by @Ge0rg3 in https://github.com/Ge0rg3/requests-ip-rotator/pull/47
    • Document New Features by @Ge0rg3 in https://github.com/Ge0rg3/requests-ip-rotator/pull/48

    Full Changelog: https://github.com/Ge0rg3/requests-ip-rotator/compare/v1.0.12...v1.0.14

    Source code(tar.gz)
    Source code(zip)
  • v1.0.12(Jul 26, 2022)

    What's Changed

    • Allow silent runs to reduce noise
    • Add pagination to gateway getting by @RobertLucey in https://github.com/Ge0rg3/requests-ip-rotator/pull/32
    • Do not fail on name checking unnamed gateways by @RobertLucey in https://github.com/Ge0rg3/requests-ip-rotator/pull/33

    New Contributors

    • @RobertLucey made their first contribution in https://github.com/Ge0rg3/requests-ip-rotator/pull/32

    Full Changelog: https://github.com/Ge0rg3/requests-ip-rotator/compare/v1.0.11...v1.0.12

    Source code(tar.gz)
    Source code(zip)
  • v1.0.11(Mar 8, 2022)

  • v1.0.10(Oct 11, 2021)

    Few PRs moved into this:

    • Can now handle with block
    • Automatically randomize X-Forwarded-For header
    • No longer creates usage plans
    • Updated README with better process explanation

    Will be creating a separate project to address #6 in the coming month, that will depend on this project for creating AWS resources. Its too big a jump to transform this into a truly async project on its own, as requests does not handle it well.

    Source code(tar.gz)
    Source code(zip)
    requests-ip-rotator-main.zip(21.40 KB)
Python port of proxy-www (https://github.com/justjavac/proxy-www)

proxy-www.py Python port of proxy-www (https://github.com/justjavac/proxy-www). Implemented additional functionalities! How to install pip install pro

Minjun Kim (Lapis0875) 20 Dec 08, 2021
A SOCKS proxy server implemented with the powerful python cooperative concurrency framework asyncio.

asyncio-socks-server A SOCKS proxy server implemented with the powerful python cooperative concurrency framework asyncio. Features Supports both TCP a

Amaindex 164 Dec 30, 2022
API to establish connection between server and client

Socket-programming API to establish connection between server and client, socket.socket() creates a socket object that supports the context manager ty

Muziwandile Nkomo 1 Oct 30, 2021
Geowifi 📡 💘 🌎 Search WiFi geolocation data by BSSID and SSID on different public databases.

Geowifi 📡 💘 🌎 Search WiFi geolocation data by BSSID and SSID on different public databases.

GOΠZO 441 Dec 23, 2022
Python script to stop qBittorrent from torrenting without VPN for users with static IP.

Python script to stop qBittorrent from torrenting without VPN for users with static IP.

voidoak_ 1 Oct 25, 2021
A Python library to ease the integration with the Beem Africa (SMS, AIRTIME, OTP, 2WAY-SMS, BPAY, USSD)

python-client A Python library to easy the integration with the Beem Africa SMS Gateway Features to be Implemented Airtime OTP SMS Two way SMS USSD Bp

Beem Africa 24 Oct 29, 2022
PcapXray - A Network Forensics Tool - To visualize a Packet Capture offline as a Network Diagram

PcapXray - A Network Forensics Tool - To visualize a Packet Capture offline as a Network Diagram including device identification, highlight important communication and file extraction

Srinivas P G 1.4k Dec 28, 2022
a safe proxy over tls

TlsProxys 基于TLS协议的http流量代理 安装 ※ 需要python3.7+ linux: python3.9 -m pip install TlsProxys windows: pip install TlsProxys 基本用法 服务器端: $ tpserver [command]

56 Nov 30, 2022
A simple hosts picker for Microsoft Services

A simple Python scrip for you to select the fastest IP for Microsoft services.

Konnyaku 394 Dec 17, 2022
The module that allows the collection of data sampling, which is transmitted with WebSocket via WIFI or serial port for CSV file.

The module that allows the collection of data sampling, which is transmitted with WebSocket via WIFI or serial port for CSV file.

Nelson Wenner 2 Apr 01, 2022
A tool to generate valid ip addresses of 55 countries. These ip's can be used for OpenBullet.

IP-Grabber A tool to generate valid ip addresses of 55 countries. These ip's can be used for OpenBullet. ive added the feature to set the generated ip

Saad 9 Dec 17, 2022
A script for generating WireGuard configs from Surfshark VPN

Surfshark WireGuard A script for generating WireGuard configs from Surfshark VPN. You must have python3 available on your machine. Usage Currently we

Alireza Ahmand 58 Dec 23, 2022
EV: IDS Evasion via Packet Manipulation

EV: IDS Evasion via TCP/IP Packet Manipulation 中文文档 Introduction EV is a tool that allows you crafting TCP packets and leveraging some well-known TCP/

256 Dec 08, 2022
Monitoring plugin to check network interfaces with Icinga, Nagios and other compatible monitoring solutions

check_network_interface - Monitor network interfaces This is a monitoring plugin for Icinga, Nagios and other compatible monitoring solutions to check

DinoTools 3 Nov 15, 2022
This will generate a very basic DHCP config with use of PHPIPAM systems.

phpipam-dhcp-config-generator This will generate a very basic DHCP config with use of PHPIPAM systems. Requirements PHPIPAM Custom Fields domain_name

1 Oct 24, 2021
List of ngrok alternatives and other ngrok-like tunneling software and services. Focus on self-hosting.

List of ngrok alternatives and other ngrok-like tunneling software and services. Focus on self-hosting.

Anders Pitman 7.3k Jan 03, 2023
Juniper SNMP Migrations For Python

Juniper SNMP Migrations This example will show how to use the PyEZ plugin for Nornir to build a NETCONF connection to a remote device validate that SN

Calvin Remsburg 1 Jan 07, 2022
sync application configuration and settings across multiple multiplatform devices

sync application configuration and settings across multiple multiplatform devices ✨ Key Features • ⚗️ Installation • 📑 How To Use • 🤔 FAQ • 🛠️ Setu

Souvik 6 Aug 25, 2022
It's a little project for change MAC address, for ethical hacking purposes

MACChangerPy It's a small project for MAC address change, for ethical hacking purposes, don't use it for bad purposes, any infringement will be your r

Erick Adriano Nunes da Silva 1 Mar 11, 2022
QUIC and HTTP/3 implementation in Python

aioquic What is aioquic? aioquic is a library for the QUIC network protocol in Python. It features a minimal TLS 1.3 implementation, a QUIC stack and

1.2k Dec 29, 2022