Browse Source

proxy checker

master
R4SAS 6 years ago
commit
a55c42e0f1
  1. 2
      .gitignore
  2. 41
      README.md
  3. 84
      bin/checker.py
  4. 9
      check
  5. 32
      check.bat
  6. 34
      list.example.ini

2
.gitignore vendored

@ -0,0 +1,2 @@
/list.ini
/result.txt

41
README.md

@ -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.

84
bin/checker.py

@ -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()

9
check

@ -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

32
check.bat

@ -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

34
list.example.ini

@ -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…
Cancel
Save