Você pode usar o comando file
. Ele está disponível na maioria das distribuições Linux por padrão, e você pode obtê-lo para o Windows através do pacote de arquivos GnuWin32 .
Ligue para:
$ file --mime-type clock.png
clock.png: image/png
Note que não é 100% preciso - não acho que nada possa ser teoricamente.
Se você quiser fazer isso em código, há libmagic
que fornece uma C api . Pode processar arquivos ou buffers na memória. ( file
usa isso no Linux.)