Endlessh Status Report Generator
A simple C++ application that reads logs generated by Endlessh and creates markdown-formatted reports.
Endlessh Report Generator

(Very) simple and rudimentary C++ program that reads /var/log/syslog, filters out endlessh logs and determines basic stats, such as unique IDs, total accepted and closed connections.

Building

This will only work on Linux systems.

mkdir build && cd build # create build directory
# generate makefiles
cmake ..
# build and generate .deb
cpack .
# only build application
make
# make docs
make docs
# make everything
make all

Installing

After building the software, either move or copy it to /usr/local/bin, or add the build path to your local $PATH environment variable.

System-wide installation

# install to /usr/local/bin
cd build
sudo make install

User-specific install

# ensure local bin-dir exists
mkdir -p ~/.local/bin || >&2 echo "Failed to create local bin dir!"
cp -v endlessh-report ~/.local/bin/
echo "export PATH=\"$(realpath ~)/.local/bin:\$PATH\"" | tee -a ~/.bashrc

Usage

After building, simply call:

./endlessh-report
# or
endlessh-report

Arguments

endlessh-report v1.2.3 - A simple report generator for endlessh tarpits.
Usage:
endlessh-report
endlessh-report [options]
endlessh-report --syslog/var/log/syslog.1
cat <file> | endlessh-report --stdin
Switches:
--no-ip-stats, -i Don't print IP statistics
--no-cn-stats, -c Don't print connection statistics
--stdin, -s Read logs from stdin
--abuse-ipdb, -a Enable AbuseIPDB-compatible CSV output
--no-ad, -n No advertising please!
--detailed, -d Provide detailed information
--help, -h Show this text and exit
--version, -v Display version information and exit
Arguments:
--syslog [f], -S[f] Override syslog/endlessh log location

Output

This program outputs its text in Markdown-compatible form. Because I wrote this program for my own use on my servers, I developed it for use with my report scripts that send me periodic emails.

Recommended use

# requires pandoc
./endlessh-report | pandoc -f markdown -t html | mail -a "Content-Type: text/html; charset=UTF-8" -s "My Endlessh Report" "you@yourdomain.com"

Sample Output

endlessh-report -i generates the following output:

# Connection Statistics
| Total Unique IPs | Total Accepted Connections | Total Closed Connections | Total Alive Connections |
|------------------|----------------------------|--------------------------|-------------------------|
| 372 | 7843 | 7894 | 51 |

Resulting in:

Connection Statistics

Total Unique IPs Total Accepted Connections Total Closed Connections Total Alive Connections
372 7843 7894 51

endlessh-report -c generates the following output: (truncated for readability)

Note that these are all botnet-IPs and are already publicly listed as such.

# Statistics per IP
| Host | Accepted | Closed |
|------------------------|----------|--------|
| 218.92.0.200 | 1736 | 1736 |
| 218.92.0.208 | 2176 | 2226 |
| 218.92.0.221 | 33 | 33 |
| 219.255.1.177 | 1 | 1 |
| 220.135.2.173 | 1 | 1 |
| 220.83.201.167 | 1 | 1 |
| 221.131.34.170 | 1 | 1 |
| 221.154.190.9 | 1 | 1 |
| 222.252.20.109 | 1 | 1 |
| 222.64.180.116 | 1 | 1 |
| 223.171.91.191 | 7 | 7 |
| 223.84.249.154 | 1 | 1 |
| 27.74.253.80 | 1 | 1 |
| 3.6.86.93 | 41 | 41 |
| 31.222.238.213 | 1 | 1 |
| 31.24.10.71 | 1 | 1 |
| 34.105.187.71 | 15 | 15 |
| 34.133.201.109 | 20 | 20 |

Resulting in:

Statistics per IP

Host Accepted Closed
218.92.0.200 1736 1736
218.92.0.208 2176 2226
218.92.0.221 33 33
219.255.1.177 1 1
220.135.2.173 1 1
220.83.201.167 1 1
221.131.34.170 1 1
221.154.190.9 1 1
222.252.20.109 1 1
222.64.180.116 1 1
223.171.91.191 7 7
223.84.249.154 1 1
27.74.253.80 1 1
3.6.86.93 41 41
31.222.238.213 1 1
31.24.10.71 1 1
34.105.187.71 15 15
34.133.201.109 20 20

Detailed Statistics

Since version v1.1.0 endlessh-report now allows for more detailed reports to be generated. These include factors such as bot time wasted, and total bytes sent.

Examples are:

Detailed IP Statistics

# Statistics per IP
| Host | Accepted | Closed | Total Time (s) | Total Bytes |
|------------------------|----------|--------|----------------|-------------|
| 218.92.0.208 | 2176 | 2226 | 64d 15h 33m 56s| 685.00MiB |
| 179.60.147.99 | 534 | 534 | 2h 52m 10s | 1.00MiB |
| 61.177.173.49 | 62 | 62 | 1d 12h 1m 18s | 15.00MiB |
| 218.92.0.221 | 33 | 33 | 8h 39m 45s | 3.00MiB |
| 61.177.172.98 | 48 | 48 | 19h 38m 37s | 8.00MiB |
| 61.177.173.47 | 56 | 56 | 1d 16h 44m 50s | 17.00MiB |
| 210.97.53.178 | 2 | 2 | 6s | 333B |
| 61.177.173.48 | 31 | 31 | 55m 10s | 298.00KiB |
| 61.177.173.53 | 72 | 72 | 2d 6h 20m 48s | 24.00MiB |
| 61.177.173.39 | 53 | 53 | 1d 13h 17m 29s | 16.00MiB |
| 61.177.172.108 | 45 | 45 | 8h 4m 45s | 3.00MiB |
| 61.177.173.52 | 39 | 39 | 8h 28m 24s | 3.00MiB |
| 61.177.172.104 | 35 | 35 | 13h 28m 37s | 5.00MiB |
| 61.177.172.19 | 48 | 48 | 23h 57m 54s | 10.00MiB |
| 61.177.173.51 | 55 | 55 | 4d 6h 59m 36s | 45.00MiB |
| 61.177.173.50 | 67 | 67 | 4d 9h 26s | 46.00MiB |
| 61.177.172.90 | 53 | 53 | 1d 2h 14m 29s | 11.00MiB |
| 61.177.173.46 | 56 | 56 | 4d 14h 44m 33s | 48.00MiB |
| 61.177.172.124 | 38 | 38 | 1d 2h 57s | 11.00MiB |
| 61.177.173.36 | 49 | 49 | 2d 1h 8m 47s | 21.00MiB |
| 185.196.220.32 | 15 | 15 | 52s | 5.00KiB |
| 141.98.10.154 | 49 | 49 | 2m 56s | 16.00KiB |
| 61.177.173.35 | 45 | 45 | 1d 5h 21m 34s | 12.00MiB |
| 64.62.197.197 | 2 | 2 | 8s | 668B |

Resulting in:

Statistics per IP

Host Accepted Closed Total Time (s) Total Bytes
218.92.0.208 2176 2226 64d 15h 33m 56s 685.00MiB
179.60.147.99 534 534 2h 52m 10s 1.00MiB
61.177.173.49 62 62 1d 12h 1m 18s 15.00MiB
218.92.0.221 33 33 8h 39m 45s 3.00MiB
61.177.172.98 48 48 19h 38m 37s 8.00MiB
61.177.173.47 56 56 1d 16h 44m 50s 17.00MiB
210.97.53.178 2 2 6s 333B
61.177.173.48 31 31 55m 10s 298.00KiB
61.177.173.53 72 72 2d 6h 20m 48s 24.00MiB
61.177.173.39 53 53 1d 13h 17m 29s 16.00MiB
61.177.172.108 45 45 8h 4m 45s 3.00MiB
61.177.173.52 39 39 8h 28m 24s 3.00MiB
61.177.172.104 35 35 13h 28m 37s 5.00MiB
61.177.172.19 48 48 23h 57m 54s 10.00MiB
61.177.173.51 55 55 4d 6h 59m 36s 45.00MiB
61.177.173.50 67 67 4d 9h 26s 46.00MiB
61.177.172.90 53 53 1d 2h 14m 29s 11.00MiB
61.177.173.46 56 56 4d 14h 44m 33s 48.00MiB
61.177.172.124 38 38 1d 2h 57s 11.00MiB
61.177.173.36 49 49 2d 1h 8m 47s 21.00MiB
185.196.220.32 15 15 52s 5.00KiB
141.98.10.154 49 49 2m 56s 16.00KiB
61.177.173.35 45 45 1d 5h 21m 34s 12.00MiB
64.62.197.197 2 2 8s 668B

Detailed Connection Statistics

# Connection Statistics
| Total Unique IPs | Total Accepted Connections | Total Closed Connections | Total Alive Connections | Total Bot Time Wasted | Total Bytes Sent |
|------------------|----------------------------|--------------------------|-------------------------|-----------------------|------------------|
| 372 | 7843 | 7895 | 52 | 180d 35m 12s | 1893.00MiB |

Resulting in:

Connection Statistics

Total Unique IPs Total Accepted Connections Total Closed Connections Total Alive Connections Total Bot Time Wasted Total Bytes Sent
372 7843 7895 52 180d 35m 12s 1893.00MiB

Detailed AbuseIPDB CSV format

IP,Categories,ReportDate,Comment
218.92.0.208,"18,14,22,15",2022-10-15T22:43:11Z,"218.92.0.208 fell into Endlessh tarpit; 50/2276 total connections are currently still open. Total time wasted: 64d 15h 33m 56s. Total bytes sent by tarpit: 685.00MiB. Report generated by Endlessh Report Generator v1.2.3"
179.60.147.99,"18,14,22,15",2022-10-15T22:43:11Z,"179.60.147.99 fell into Endlessh tarpit; 0/534 total connections are currently still open. Total time wasted: 2h 52m 10s. Total bytes sent by tarpit: 1.00MiB. Report generated by Endlessh Report Generator v1.2.3"
61.177.173.49,"18,14,22,15",2022-10-15T22:43:11Z,"61.177.173.49 fell into Endlessh tarpit; 0/62 total connections are currently still open. Total time wasted: 1d 12h 1m 18s. Total bytes sent by tarpit: 15.00MiB. Report generated by Endlessh Report Generator v1.2.3"
218.92.0.221,"18,14,22,15",2022-10-15T22:43:11Z,"218.92.0.221 fell into Endlessh tarpit; 0/33 total connections are currently still open. Total time wasted: 8h 39m 45s. Total bytes sent by tarpit: 3.00MiB. Report generated by Endlessh Report Generator v1.2.3"
61.177.172.98,"18,14,22,15",2022-10-15T22:43:11Z,"61.177.172.98 fell into Endlessh tarpit; 0/48 total connections are currently still open. Total time wasted: 19h 38m 37s. Total bytes sent by tarpit: 8.00MiB. Report generated by Endlessh Report Generator v1.2.3"
61.177.173.47,"18,14,22,15",2022-10-15T22:43:11Z,"61.177.173.47 fell into Endlessh tarpit; 0/56 total connections are currently still open. Total time wasted: 1d 16h 44m 50s. Total bytes sent by tarpit: 17.00MiB. Report generated by Endlessh Report Generator v1.2.3"
210.97.53.178,"18,14,22,15",2022-10-15T22:43:11Z,"210.97.53.178 fell into Endlessh tarpit; 0/2 total connections are currently still open. Total time wasted: 6s. Total bytes sent by tarpit: 333B. Report generated by Endlessh Report Generator v1.2.3"
61.177.173.48,"18,14,22,15",2022-10-15T22:43:11Z,"61.177.173.48 fell into Endlessh tarpit; 0/31 total connections are currently still open. Total time wasted: 55m 10s. Total bytes sent by tarpit: 298.00KiB. Report generated by Endlessh Report Generator v1.2.3"
61.177.173.53,"18,14,22,15",2022-10-15T22:43:11Z,"61.177.173.53 fell into Endlessh tarpit; 0/72 total connections are currently still open. Total time wasted: 2d 6h 20m 48s. Total bytes sent by tarpit: 24.00MiB. Report generated by Endlessh Report Generator v1.2.3"
45.141.84.126,"18,14,22,15",2022-10-15T22:43:11Z,"45.141.84.126 fell into Endlessh tarpit; 2/13 total connections are currently still open. Total time wasted: 10d 4h 5m 29s. Total bytes sent by tarpit: 107.00MiB. Report generated by Endlessh Report Generator v1.2.3"