Simulates enough of a Telnet connection in order to log failed login attempts.
C Roff Makefile
Switch branches/tags
Nothing to show
Latest commit 2b88261 Mar 4, 2017 @robertdavidgraham committed on GitHub Merge pull request #7 from n0xa/master
Added some missing options to the usage message when run without args


This is a simple program to log login attempts on Telnet (port 23).

It's designed to track the Mirai botnet. Right now (Oct 23, 2016) infected Mirai machines from around the world are trying to connect to Telnet on every IP address about once per minute. This program logs both which IP addresses are doing the attempts, and which passwords they are using.

I wrote it primarily because installing telnetd on a Raspberry Pi wasn't sufficient. For some reason, the Mirai botnet doesn't like the output from Telnet, and won't try to login. So I needed something that produced the type of Telnet is was expecting. While I was at it, I also wrote some code to parse things and extract the usernames/passwords.


Just run the program in order to see passwords and IP addresses appear on stdout.


To log the information to files, use the -p and -i options.

telnetlogger -p passwds.txt -i ips.txt

To listen on another port (for testing and whatnot), use -l.

telnetlogger -l 2323

Note that on many systems, you'll get an "access denied" error message, because programs that open ports below 1024 need extra priveleges. So you may need to sudo the program.


Type make or:

gcc telnetlogger.c -o telnetlogger -lpthread

It'll also compile/run on Windows.


There are two sample output files, passwords.txt and ips.txt that I generated by running this for the last day.

The program prints the username/password combination one line at a time.

admin 7ujMko0admin
root root
root 54321
root xmhdipc
root root
guest 12345
root 888888
root 123456
admin smcadmin

It doesn't filter duplicates. The easiest way to get rid of duplicates is just to sort/uniq the output.

sort passwords.txt | uniq

The IP addresses work the same way as the passwords, with one per line.

Note that IPv6 is supported. Also note that you'll get lots of duplicates, so you'll be doing sort/uniq a lot in order to reduce the list size. The duplicates will make it easier to count how often individual IP address's attempt to connection. Thus, you can run the following:

sort ips.txt | uniq -c | sort -n

This produces results like:



This project can help you geo-locate the IPs, to see which country they are coming from.