-- fingerprinting example Write[[ redbean binary trees

redbean finger demo

]] Write[[

Your TCP SYN Packet

]] -- See .init.lua hooks which set SYN and SYNERR globals. if syn then if syn ~= '' then Write('
\r\n') Write('
syn = unix.getsockopt(GetClientFd(), unix.SOL_TCP, unix.TCP_SAVED_SYN)\r\n') Write('
') Write(EscapeHtml(EncodeLua(syn))) Write('\r\n') Write('
finger.FingerSyn(syn)\r\n') Write('
') Write(EscapeHtml(EncodeLua(finger.FingerSyn(syn)))) Write('\r\n') Write('
finger.DescribeSyn(syn)\r\n') Write('
') Write(EscapeHtml(EncodeLua(finger.DescribeSyn(syn)))) Write('\r\n') Write('
finger.GetSynFingerOs(finger.FingerSyn(syn))\r\n') Write('
') Write(EscapeHtml(EncodeLua(finger.GetSynFingerOs(finger.FingerSyn(syn))))) Write('\r\n') Write('
\r\n') else Write([[

your operating system returned an empty string as the syn packet! did you remember to use setsockopt(TCP_SAVE_SYN)? did you call getsockopt(TCP_SAVED_SYN) more than once?

]]) end else Write([[

your operating system most likely doesn't support TCP_SAVED_SYN because getsockopt() returned %s.

]] % {EscapeHtml(tostring(synerr))}) end