cc shadow_cracker.c -lcrypt -o bruteforce -Wall -std=c11 -pedantic
bruteforce <dictionary file>
OR
bruteforce <path/to/etc/shadow> <dictionary file>
This will take a long time especially if you use a large dictionary file.
Wikipedia page on /etc/passwd and /etc/shadow
cracker.py <path/to/dictionary/file>
Because Python's spwd module isn't as robust as <spwd.h>
in C.