NAME¶
proxycheck — open proxy server checker
SYNOPSYS¶
proxycheck options host[:
proto_port_spec]...
DESCRIPTION¶
proxycheck is a simple open proxy checking tool which is capable to
quickly discovery open proxy servers on many hosts. It's primary goal is to
detect an open proxy server in order to prevent it's abuse by various
"bad guys", mostly spammers. Having a wide-open proxy service
running on a publicaly accessible network is a very bad idea nowadays, and
proxycheck may be used to find such system in order to be able to
either secure a system, or to refuse servicing it until it will be secured
properly.
In order to determine if a given host is running an open proxy service,
proxycheck tries to connect to a given destination system via a host
and perform some actions, trying to talk with the destination system. If a
talk is successeful,
proxycheck assumes the proxy service is running
and wide-open.
proxycheck supports all commonly used proxy protocols, namely, HTTP
CONNECT method, SOCKS versions 4 and 5, and Wingate
"telnet"‐style proxies. In future, support for more protocols
may be added.
Please note that with current number of various trojan horses cicrulating
around, each opening a proxy on a random port, it is not really enouth to
probe for standard (in whatever reason) ports built into the
proxycheck. Instead, it is highly recommended to use a list of
currently active ports maintained by several people on the 'net.
OPTIONS¶
The following command-line options are recognized:
- -h
- print a short help and exit.
- -v
- increase the verbosity level. All debugging messages will go to standard
error stream.
- -d deshost:destport (required)
- try to establish a proxied connection to the given dsthost, port
dstport. This option is required.
- -c check[:params] (required)
- the "method" proxycheck will use when talking to a
destination system to determine if a proxy is open or not. Interpretation
of params is check-dependant. This option is required.
Several methods are available:
- chat:sendstr:expectstr
- Try to perform simple "chat" with the destination system: send
the string given as sendstr and wait for expectstr on
output. If sendstr is empty, proxycheck will send the proxy
parameters in the form
protocol:ip-address:portnumber
to the remote system. Proxy assumed to be open if expectstr is
found.
- dsbl (no parameters accepted)
- try to submit all found proxies to the DSBL.org-like system, see
http://dsbl.org/ for more details. All the parameters required (username,
password, recipient address, cookie server, ...) are expected to be found
in environment variables. Run proxycheck with -h option to
see a list of recognized variables and their default values. By default,
proxycheck will anonimously submit all found proxies to
unconfirmed.dsbl.org (which isn't very useful). For trusted DSBL user, at
least DSBL_USER and DSBL_PASS variables should be set properly.
- -p proto_port_spec
- specifies protocol and ports to connect to. If not given,
proxycheck will try it's built-in default list. This option may be
specified more than once. See below for proto_port_spec. If
proto_port_spec is specified for a single host to check, it applies
to that host only, and no protocols/ports in default list will be checked
for that host.
- -D
- do not reset default port list when using -p option, but prepend
new ports to it instead.
- -a
- use more "advanced" ports/protocols. The more -a's given,
the more ports/protocols will be probed. For a complete list of all ports
and protocols and their level, execute proxycheck with -h
option.
- -t timeout
- a timeout, in secounds, for every operation. Default value is 30 secounds.
The timer starts at the connection attempt to the proxy itself, after
sending the "connect" command to the proxy and so on.
- -m maxconn
- Do not attempt to make more than maxconn parallel connections. By
default, maximum number of parallel connections limited by the operating
system and on most systems it is around 1000.
- -M maxhconn
- Do not make more than maxhconn parallel connections to the same
host (default is unlimited). This may be useful for overloaded proxies
which can't handle many parallel connections using different
ports/protocols, but may significantly slow down the whole process.
- -s
- when an open proxy is found on a given IP, stop probing for other
ports/protocols for this IP. Best used when many IPs are tested, and/or
with -M option. This is because currently, proxycheck will
not make any new connections to such host, but will wait for
already active connections to complete.
- -b bindaddr
- use bindaddr as a source address for all outgoing connections.
- -n
- write a line about definitely closed proxies to stdout in additional to
writing about open proxies, in a form
127.0.0.1 http:8080 closed
- -x
- print extended proxy information (proxy-agent and the like) if available.
This will be on the same "open" (or "closed" with -n)
line, last, enclosed in square brackets [].
- -i filename
- read list of hosts to check from a given file filename (in addition
to command line), or from stdin if filename if `-'.
Protocol and Port specification¶
Proxy protocols and ports to try (
proto_port_spec) specified using the
following syntax:
[proto:][port,port,port]
like:
hc:3128,8080 (http protocol on ports 3128 and 8080)
hc: (default list of ports for http protocol)
3128 (try http protocol on standard http port 3128)
1234 (try all protocols on non-standard port 1234)
Run
proxycheck -h to see a list of supported protocols and default ports.
USAGE¶
Simplest usage of
proxycheck is to try to connect to e.g. your own
mailserver with
chat check method. First, connect to your mailserver on
port 25 to see which line it outputs upon connection (SMTP greething line),
and use it with
chat:
proxycheck -d yourmailserver.example.org:25 \
-c chat:: greething ip.add.re.ss...
proxycheck will write a single line for every proto:port it finds to be
open on stdout, in the form:
127.0.0.3 hc:80 open
where
127.0.0.3 is an IP address of a host being tested,
hc is the
protocol name (HTTP CONNECT, consult
proxycheck -h for a full list of
protocols) and
80 is a port number where the proxy service is running.
In addition, if
proxycheck is able to guess
outgoing IP address of
a proxy as seen by a destination system, and if that address is different from
input
proxycheck is connecting to, it will print this information too
on the same line, like:
127.0.0.2 hc:80 open 127.0.0.3
where
127.0.0.3 is
outgoing IP addres of a multihomed/cascaded
proxy as reported by the destination system. This IP address is hint only,
there is no simple and reliable way currently exists for
proxycheck to
determine that information.
Proxycheck is able to parse a line sent by
remote system in
-c chat mode — in this mode,
proxycheck
skips all printable characters after
expstr it found and searches for
opening `[', when tries to find closing ']' and interpret digits and dots in
between as an IP address which gets printed like above. If your mailserver's
initial reply contains remote system's IP, or if your mailserver replies with
remote system's IP address to HELO/EHLO command, this feature may be useful
(in the last case, HELO command should be specified in chat).
When
-n option is specified, for proto:ports which aren't running open
proxy service, and for which
proxycheck is able to strongly determine
this, a line in the following format will be written:
127.0.0.4 hc:80 closed
Note however that in most cases there is no way to reliable determine whenever a
given service is
not open: for example, an open proxy server may be
overloaded and refusing connections. In most cases,
proxycheck assumes
proxy is in unknown state, only a few codes are recognized as real indication
of "closed" state.
When
-x option is specified, there will be additional proxy info written
on the same line (if available), like:
127.0.0.2 hc:80 open 127.0.0.3 [AnalogX 3.1415926]
127.0.0.3 hc:80 open [AnalogX 3.1415926]
127.0.0.4 hc:80 closed [AnalogX 3.1415926]
One may see some detail of
proxycheck's operations giving sufficient
number of
-v options in the command line. Verbosity level of 5 (
-vvvvv) will show almost everything. All the debugging output will go
to the standard error stream and thus will not affect normal operations (when
you process
proxycheck's output using some script).
EXIT CODE¶
proxycheck will exit with code 100 if at least one open proxy server was
found. In case of incorrect usage, it will exit with code 1. If no open
proxies where found,
proxycheck will return 0.
LICENSE¶
This program is free software. It may be used and distributed in the terms of
General Public License (GPL) version 2 or later.
AUTHOR¶
proxycheck written by Michael Tokarev <mjt@corpit.ru>. Latest
version of this utlilty may be found at
http://www.corpit.ru/mjt/proxycheck.html.