12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- Forge-socket banner grab
- ======
- This utility, in combination with a kernel module
- (https://github.com/ewust/forge_socket/) will complete the half-open connection
- created by ZMap during a TCP-scan, optionally send a small message, and wait
- for the hosts response. The response is then printed along with their IP
- address on stdout. Periodic status messages appear on stderr.
- This utility is functionally equivalent to banner-grab-tcp, however, instead of
- having the kernel send a RST packet for the server's SYN+ACK, and
- banner-grab-tcp attempting to start a fresh TCP connection with the host,
- forge-socket will take the parameters of the SYN+ACK packet, and use a kernel
- module to add it as an ESTABLISHED TCP connection socket. Then, the
- forge-socket user-space program can use this socket to send() and recv() as
- normal, and completes the banner-grab process (optionally send a small message,
- and receive the server's response).
- USING:
- -----
- # Install forge-socket to the ZMap root directory:
- cd ./zmap/
- git clone git@github.com:ewust/forge_socket.git
- cd forge_socket
- make
- sudo insmod forge_socket.ko
- # Don't send RST packets (forge-socket will complete these connections instead)
- sudo iptables -A OUTPUT -p tcp -m tcp --tcp-flags RST,RST RST,RST -j DROP
- # Use ZMap + forge-socket simultaneously:
- make
- #echo -e -n "GET / HTTP/1.1\r\nHost: %s\r\n\r\n" > http-req
- sudo su
- ulimit -SHn 1000000 && ulimit -SSn 1000000
- zmap -p 80 -B 50M -N 1000 -O extended_file -o - | ./forge-socket -c 8000 -d http-req > http-banners.out
- The options are similar to banner-grab-tcp, except there is no connection timeout :)
- OPTIONS:
- -----
- -c, --concurent Number of connections that can be going on at once.
- This, combined with timeouts, will decide the maximum
- rate at which banners are grabbed. If this value
- is set higher than 1000, you should use
- `ulimit -SSn 1000000` and `ulimit -SHn 1000000` to
- avoid running out of file descriptors (typically capped
- at 1024).
- -r, --read-timeout Read timeout (seconds). Give up on a host if after
- connecting (and optionally sending data), it does
- not send any response by this time. Default: 4 seconds.
- -v, --verbosity Set status verbosity. Status/error messages are outputed
- on stderr. This value can be 0-5, with 5 being the most
- verbose (LOG_TRACE). Default: 3 (LOG_INFO)
- -f, --format Format to output banner responses. One of 'hex', 'ascii',
- or 'base64'.
- 'hex' outputs ascii hex characters, e.g. 48656c6c6f.
- 'ascii' outputs ascii, without separators, e.g. Hello
- 'base64' outputs base64 encoding, e.g. SGVsbG8=
- Default is base64.
- -d, --data Optional data file. This data will be sent to each host
- upon successful connection. Currently, this file does
- not allow null characters, but supports up to 4
- occurances of the current host's IP address, by replacing
- %s with the string (inet_ntoa) of that host's IP address.
|