Zacznę powoli od prostych i starych protokołów. Jednym z takich jest właśnie Quote Of The Day znany również pod nazwą RFC865 który według wikipedii ma zapewniać niekończący się strumień mądrości prosto z portu numer 17.
Tak właściwie, to nie wiem dlaczego powstał specjalny protokół i własny port dla tak banalnej usługi ale nie jest to teraz istotne bo i tak nikt tego nie używa.
Co ciekawe nie mogłem nawet znaleść oficjalnej paczki w repozytoriach debiana i slackware dla tego protokołu. W zasadzie jedyne co znalazłem to pozostałości po usłudze zwanej simptcp
o, tutaj.
Znalazłem też dwa nadal działające serwery które udostępniają tą funkcjonalność źródło.
No tak, ale to już było a ja chcę się zająć implementacją tej usługi dla siebie. Oczywiste rozwiązanie to internetowy kotek - nc
i fortune
. Dzięki nim możemy bez problemu i w najłatwiejszy możliwy sposób zaimplementować ten protokół u siebie.
nc -l -p 17 -e /usr/games/fortune
Ale to by było zbyt proste :) Poza tym taka komenda to dość samobójcze podejście do problemu, ponieważ port 17 (a dokładniej każdy port < 1024) może obsługiwać tylko root co raczej nie jest bezpieczne. Co prawda nie ma pewnie żadnego exploitu na fortune ale i tak lepiej tego nie robić w ten sposób.
Poza tym to świetna okazja na odświerzenie wiedzy na temat linuxowych socketów i biblioteki do obsługi połączeń TCP.
Dlatego też napisałem własną, prostą wersję takiego programu - qotdd.
Nie jest to nic specjalnego, ale działa całkiem fajnie. Program w pewnym sensie działa jak proste proxy dla aplikacji fortune ale nie naraża systemu bo zrzuca uprawnienia zaraz po zajęciu portu.
Więcej na temat połączenia się z usługą możecie znaleść na stronie mojego mikrusa pod tym adresem uw515.mikr.us.