cosmopolitan/tool/net/demo/finger.lua

66 lines
1.8 KiB
Lua
Raw Normal View History

-- fingerprinting example
Write[[<!doctype html>
<title>redbean binary trees</title>
<style>
body { padding: 1em; }
h1 a { color: inherit; text-decoration: none; }
h1 img { border: none; vertical-align: middle; }
input { margin: 1em; padding: .5em; }
p { word-break: break-word; max-width: 650px; }
dt { font-family: monospace; }
dd { margin-top: 1em; margin-bottom: 1em; }
.hdr { text-indent: -1em; padding-left: 1em; }
</style>
<h1>
<a href="/"><img src="/redbean.png"></a>
<a href="finger.lua">redbean finger demo</a>
</h1>
]]
Write[[
<h2>Your TCP SYN Packet</h2>
]]
-- See .init.lua hooks which set SYN and SYNERR globals.
if syn then
if syn ~= '' then
Write('<dl>\r\n')
Write('<dt>syn = unix.getsockopt(GetClientFd(), unix.SOL_TCP, unix.TCP_SAVED_SYN)\r\n')
Write('<dd>')
Write(EscapeHtml(EncodeLua(syn)))
Write('\r\n')
Write('<dt>finger.FingerSyn(syn)\r\n')
Write('<dd>')
Write(EscapeHtml(EncodeLua(finger.FingerSyn(syn))))
Write('\r\n')
Write('<dt>finger.DescribeSyn(syn)\r\n')
Write('<dd>')
Write(EscapeHtml(EncodeLua(finger.DescribeSyn(syn))))
Write('\r\n')
Write('<dt>finger.GetSynFingerOs(finger.FingerSyn(syn))\r\n')
Write('<dd>')
Write(EscapeHtml(EncodeLua(finger.GetSynFingerOs(finger.FingerSyn(syn)))))
Write('\r\n')
Write('</dl>\r\n')
else
Write([[
<p>
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?
</p>
]])
end
else
Write([[
<p>
your operating system most likely doesn't support TCP_SAVED_SYN
because getsockopt() returned %s.
</p>
]] % {EscapeHtml(tostring(synerr))})
end