mirror of https://github.com/r4sas/proxychecker
R4SAS
6 years ago
commit
a55c42e0f1
6 changed files with 202 additions and 0 deletions
@ -0,0 +1,41 @@
@@ -0,0 +1,41 @@
|
||||
Proxy checker |
||||
===== |
||||
|
||||
Written on python, requires at least version 3.4. |
||||
|
||||
For work needed PySocks and urllib3, install it with pip: |
||||
``` |
||||
$ python3 -m pip install PySocks |
||||
$ python3 -m pip install urllib3 |
||||
``` |
||||
|
||||
That script written primary for checking I2P proxy tunnels. |
||||
|
||||
Configuring |
||||
----- |
||||
|
||||
Fill `list.ini` with your tunnels options as in example file. |
||||
|
||||
At same time you need that tunnels configured in your tunnels.conf (i2pd) or tunnels page (i2p). |
||||
|
||||
Example for *false.i2p* outproxy usage in i2pd: |
||||
``` |
||||
[FALSE] |
||||
type = httpproxy |
||||
address = 127.0.0.1 |
||||
port = 4450 |
||||
outproxy = http://77mpz4z6s4eenjexleclqb36uxvqjtztqikjfqa4sovojh6gwwha.b32.i2p |
||||
keys = false.dat |
||||
``` |
||||
|
||||
And, according to that tunnel, proxy checker config: |
||||
``` |
||||
[4450] |
||||
type = http |
||||
address = 77mpz4z6s4eenjexleclqb36uxvqjtztqikjfqa4sovojh6gwwha.b32.i2p |
||||
name = false.i2p |
||||
owner = meeh |
||||
info = httpproxy |
||||
``` |
||||
|
||||
**Note that fields PORT and TYPE is required!** Other fields is not required and used only for filling table output. |
@ -0,0 +1,84 @@
@@ -0,0 +1,84 @@
|
||||
#!/usr/bin/python3 |
||||
|
||||
import sys, configparser |
||||
from datetime import datetime |
||||
import socket, urllib.request |
||||
## PySocks |
||||
import socks |
||||
from sockshandler import SocksiPyHandler |
||||
|
||||
TESTURI = "https://google.com/" |
||||
PROXYHOST = "127.0.0.1" |
||||
TIMEOUT = 30 |
||||
|
||||
## https://stackoverflow.com/a/14906787 |
||||
class Logger(object): |
||||
def __init__(self): |
||||
self.terminal = sys.stdout |
||||
self.log = open("result.txt", "w") |
||||
|
||||
def write(self, message): |
||||
self.terminal.write(message) |
||||
self.log.write(message) |
||||
|
||||
def flush(self): |
||||
self.terminal.flush() |
||||
|
||||
sys.stdout = Logger() |
||||
|
||||
def checkproxy(port, type): |
||||
if type == 'http': |
||||
handler = socks.HTTP |
||||
elif type == 'socks': |
||||
handler = socks.SOCKS5 |
||||
elif type == 'http0': |
||||
proxy = urllib.request.ProxyHandler({'http': PROXYHOST +':' + str(port)}) |
||||
else: |
||||
print("[unsupported type]") |
||||
return |
||||
|
||||
if type == 'http0': |
||||
opener = urllib.request.build_opener(proxy) |
||||
else: |
||||
opener = urllib.request.build_opener( |
||||
SocksiPyHandler(handler, PROXYHOST, port) |
||||
) |
||||
|
||||
try: |
||||
response = opener.open(TESTURI, timeout=TIMEOUT).read() |
||||
except Exception as e: |
||||
print("[%5s]" % ('dead')) |
||||
return |
||||
|
||||
print("[%5s]" % ('alive')) |
||||
|
||||
def main(): |
||||
# Read list with ports and information |
||||
config = configparser.ConfigParser() |
||||
config.read('list.ini') |
||||
proxyList = config.sections() |
||||
|
||||
print("Started check at %s UTC" % (datetime.utcnow())) |
||||
print("Types: HTTP - using SocksiPyHandler, HTTP0 - using urllib, SOCKS - only 5th version using SocksiPyHandler") |
||||
print("[%5s] [%5s] [%60s] [%16s] [%16s] [%16s] [%5s]" % |
||||
('PORT','TYPE','B32 ADDRESS','NAME','OWNER','INFO','STATUS')) |
||||
|
||||
for currentProxy in proxyList: |
||||
tunnel = dict(config.items(str(currentProxy))) |
||||
|
||||
print( |
||||
"[%5d] [%5s] [%60s] [%16s] [%16s] [%16s] " % ( |
||||
int(currentProxy), |
||||
tunnel['type'] if ("type" in tunnel) else "none", |
||||
tunnel['address'] if ("address" in tunnel) else "", |
||||
tunnel['name'] if ("name" in tunnel) else "", |
||||
tunnel['owner'] if ("owner" in tunnel) else "", |
||||
tunnel['info'] if ("info" in tunnel) else "" |
||||
), |
||||
end='', flush=True |
||||
) |
||||
|
||||
checkproxy(int(currentProxy), str(config[currentProxy]['type'])) |
||||
|
||||
if __name__ == '__main__': |
||||
main() |
@ -0,0 +1,9 @@
@@ -0,0 +1,9 @@
|
||||
#!/bin/sh |
||||
|
||||
findpy3=$(which python3) |
||||
if [ -z $findpy3 ]; then |
||||
echo "Can't find 'pyhton3' installed. That script needs it!"; |
||||
exit 1; |
||||
fi |
||||
|
||||
$findpy3 bin/checker.py |
@ -0,0 +1,32 @@
@@ -0,0 +1,32 @@
|
||||
@echo off |
||||
title Checking tunnels... |
||||
SET PY_PYTHON=3 |
||||
|
||||
for %%X in (python3.exe) do (set FOUND=%%~$PATH:X) |
||||
if defined FOUND ( |
||||
set xPy=%FOUND% |
||||
goto RUN_CHECK |
||||
) |
||||
|
||||
for %%X in (python.exe) do (set FOUND=%%~$PATH:X) |
||||
if defined FOUND ( |
||||
%FOUND% -c "import sys; print(sys.version_info[0])" | find "3" >nul && set xyes=1 || set xyes=0 |
||||
if "%xyes%" == 1 ( |
||||
set xPy=%FOUND% |
||||
goto RUN_CHECK |
||||
) else ( |
||||
echo Error: Python3 not found! |
||||
pause |
||||
exit |
||||
) |
||||
) else ( |
||||
echo Error: Python3 not found! |
||||
pause |
||||
exit |
||||
) |
||||
|
||||
:RUN_CHECK |
||||
%xPy% bin\checker.py |
||||
|
||||
echo Done... |
||||
pause > nul |
@ -0,0 +1,34 @@
@@ -0,0 +1,34 @@
|
||||
; REQIRED FIELDS IS PORT and TYPE! |
||||
; Other fields is not required |
||||
; |
||||
; Указание полей PORT и TYPE обязательно! |
||||
; Остальные можно заполнять чем угодно, |
||||
; они используются только для вывода информации в таблицу |
||||
; |
||||
; [PORT] |
||||
; type = type of proxy (http - using SocksiPyHandler, http0 - using urllib, socks - only 5th version using SocksiPyHandler) |
||||
; address = base32 address |
||||
; name = name of tunnel |
||||
; owner = name of owner |
||||
; info = some info |
||||
|
||||
[4450] |
||||
type = http |
||||
address = 77mpz4z6s4eenjexleclqb36uxvqjtztqikjfqa4sovojh6gwwha.b32.i2p |
||||
name = false.i2p |
||||
owner = meeh |
||||
info = httpproxy |
||||
|
||||
[4465] |
||||
type = socks |
||||
address = hob3qpw7c6yaurusuzlden66tp4opksrqqukywefnqyj6lhauhoa.b32.i2p |
||||
name = public |
||||
owner = r4sas |
||||
info = client |
||||
|
||||
[4470] |
||||
type = http |
||||
address = wfigbdfs6tvajiw24xwohbwwy5pq3jcgzevwnsky2ucwzwgodumq.b32.i2p |
||||
name = blue |
||||
owner = arctic |
||||
info = httpproxy |
Loading…
Reference in new issue