Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --[[
- RedNet Sniffer
- by kyle1elyk
- --]]
- _RNSV = 4.2 -- RedNet Sniffer Version
- function DEC_HEX(IN)
- --http://lua-users.org/lists/lua-l/2004-09/msg00054.html
- local B,K,OUT,I,D=16,"0123456789ABCDEF","",0
- while IN>0 do
- I=I+1
- IN,D=math.floor(IN/B),(IN%B)+1
- OUT=string.sub(K,D,D)..OUT
- end
- if OUT=="" then OUT = "0" end
- return OUT
- end
- function deepcopy(orig)
- --http://lua-users.org/wiki/CopyTable
- local orig_type = type(orig)
- local copy
- if orig_type == 'table' then
- copy = {}
- for orig_key, orig_value in next, orig, nil do
- copy[deepcopy(orig_key)] = deepcopy(orig_value)
- end
- setmetatable(copy, deepcopy(getmetatable(orig)))
- else -- number, string, boolean, etc
- copy = orig
- end
- return copy
- end
- -- Removed the mobile version check
- paused = false
- w,h = term.getSize()
- local modem = peripheral.wrap("back")
- modem.open(65533)
- hasMsg = false
- modemSide, sC, rC, msg, sDist = nil
- savedMsg = {}
- for i=1,16 do
- savedMsg[i] = {}
- end
- local backColor, labelColor, secLabelColor = colors.gray, colors.lime, colors.green
- local re = "Resend Last Message"
- term.setBackgroundColor(backColor)
- term.setCursorPos(1,1)
- term.clear()
- function pKV(k,v,tempColor)
- term.setTextColor(labelColor)
- write(k..": ")
- term.setTextColor(tempColor or colors.white)
- print(v)
- term.setTextColor(colors.white)
- end
- function displayMsg(msg, sC, rC)
- paintutils.drawFilledBox(1,2,w,h-3)
- term.setBackgroundColor(backColor)
- term.setCursorPos(1,3)
- pKV("Message", "\n"..textutils.serialize(msg))
- pKV("SenderChannel",sC)
- pKV("ReplyChannel",rC)
- end
- function header(msg)
- term.setBackgroundColor(labelColor)
- paintutils.drawLine(1,1,w,1)
- term.setCursorPos(1,1)
- write(msg)
- term.setBackgroundColor(backColor)
- end
- print("Sniffer Running v".._RNSV.."\nkyle1elyk\n")
- pKV("L-CLICK","VIEW")
- pKV("R-CLICK","SAVE")
- pKV("M-CLICK","SEND")
- term.setCursorPos(1,2)
- while true do
- if hasMsg then
- term.setBackgroundColor(labelColor)
- paintutils.drawLine(1,h-1,w,h-1)
- term.setCursorPos(1,h-1)
- write("Save:")
- term.setCursorPos(w-16,h-1)
- term.setBackgroundColor(labelColor)
- write(" ")
- for k,v in ipairs(savedMsg) do
- if next(v) == nil then
- term.setTextColor(colors.gray)
- else
- term.setTextColor(colors.white)
- end
- write(DEC_HEX(k-1))
- end
- term.setCursorPos(1,h)
- term.setTextColor(colors.white)
- write(re)
- for i=1, w-string.len(re)-1 do
- write(" ")
- end
- if paused then
- term.setBackgroundColor(colors.red)
- write("P")
- else
- term.setBackgroundColor(colors.green)
- write(" ")
- end
- term.setBackgroundColor(backColor)
- term.setCursorPos(1,2)
- end
- local event, arg1, arg2, arg3, arg4, arg5 = os.pullEvent()
- if not paused and event == "modem_message" then
- term.clear()
- modemSide, sC, rC, msg, sDist = arg1, arg2, arg3, arg4, arg5
- displayMsg(msg,sC,rC)
- local tC
- if sDist < 10 then tC = colors.red
- elseif sDist < 20 then tC = colors.orange
- elseif sDist < 30 then tC = colors.yellow
- else tC = colors.white end
- print()
- pKV("SenderDistance",sDist,tC)
- hasMsg = true
- elseif event == "mouse_click" and hasMsg then
- w,h = term.getSize()
- btn, x, y = arg1, arg2, arg3
- if y == h and x < w-2 then
- -- Resend last message
- term.setCursorPos(1,h)
- term.setTextColor(labelColor)
- term.setBackgroundColor(colors.white)
- write(re)
- for i=1, w-string.len(re)-1 do
- write(" ")
- end
- term.setBackgroundColor(backColor)
- term.setTextColor(colors.white)
- sendTo = 65533
- if msg.nMessageID ~= nil then
- msg.nMessageID = math.random(1, 2147483647)
- end
- if msg.nRecipient ~= nil then
- sendTo = msg.nRecipient
- end
- term.setCursorPos(1,1)
- modem.transmit(sendTo,rC,msg)
- header("SENT LAST")
- sleep(0.1)
- elseif y == h and x >= w-1 then
- paused = not paused
- elseif y == h-1 and x >= w-15 then
- key = x - (w-16)
- if btn == 3 then
- if next(savedMsg[key]) == nil then
- term.setCursorPos(1,1)
- header("NO ENTRY IN "..DEC_HEX(key-1))
- else
- sendTo = 65533
- if savedMsg[key].msg.nMessageID ~= nil then
- savedMsg[key].msg.nMessageID = math.random(1, 2147483647)
- end
- if savedMsg[key].msg.nRecipient ~= nil then
- sendTo = savedMsg[key].msg.nRecipient
- end
- term.setCursorPos(1,1)
- modem.transmit(sendTo,rC,savedMsg[key].msg)
- header("SENT "..DEC_HEX(key-1))
- displayMsg(savedMsg[key].msg,savedMsg[key].sC,savedMsg[key].rC)
- end
- elseif btn == 1 then
- if next(savedMsg[key]) == nil then
- term.setCursorPos(1,1)
- header("NO ENTRY IN "..DEC_HEX(key-1))
- else
- term.setCursorPos(1,1)
- header("VIEW "..DEC_HEX(key-1))
- displayMsg(savedMsg[key].msg,savedMsg[key].sC,savedMsg[key].rC)
- end
- else
- if next(savedMsg[key]) == nil then
- savedMsg[key].sC = sC
- savedMsg[key].rC = rC
- savedMsg[key].msg = deepcopy(msg)
- term.setCursorPos(1,1)
- header("SAVED IN "..DEC_HEX(key-1))
- displayMsg(savedMsg[key].msg,savedMsg[key].sC,savedMsg[key].rC)
- else
- savedMsg[key].sC = sC
- savedMsg[key].rC = rC
- savedMsg[key].msg = deepcopy(msg)
- term.setCursorPos(1,1)
- header("OVERWROTE "..DEC_HEX(key-1))
- end
- end
- end
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement