Guest User

spy

a guest
Jan 31st, 2017
154
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.54 KB | None | 0 0
  1. local force_modem_side = nil
  2. local whitelist_file_name = "whitelist"
  3. local blacklist_file_name = "blacklist"
  4. ------------------------------------------
  5. local args = { ... }
  6.  
  7. -- Error searching and args sorting
  8. local numbers = { }
  9. local fileName = false
  10.  
  11. do
  12. check_number = function(str)
  13. return tonumber(str) ~= nil
  14. end
  15. local usage = function(bool)
  16. if not bool then
  17. printError("spy <Port>")
  18. printError("spy <Port> <Filename>")
  19. printError("spy <Port> <Port2> ...")
  20. printError("spy <Port> <Port2> ... <Filename>")
  21. printError("spy <Portstart> - <Portend>")
  22. printError("spy <Portstart> - <Portend> <Filename>")
  23. print("")
  24. error("Create a blacklist or whitelist file to filter messages", 0)
  25. end
  26. end
  27.  
  28. if #args == 1 then
  29. usage(check_number(args[1]))
  30. table.insert(numbers, tonumber(args[1]))
  31. elseif #args == 2 then
  32. usage(check_number(args[1]))
  33. table.insert(numbers, tonumber(args[1]))
  34. if check_number(args[2]) then
  35. table.insert(numbers, tonumber(args[2]))
  36. else
  37. fileName = args[2]
  38. end
  39. elseif #args == 3 then
  40. if args[2] == "-" then
  41. usage(check_number(args[1]))
  42. usage(check_number(args[3]))
  43. usage(args[1] <= args[3])
  44. for i=tonumber(args[1]), tonumber(args[3]) do
  45. table.insert(numbers, i)
  46. end
  47. else
  48. if check_number(args[3]) then
  49. table.insert(numbers, tonumber(args[3]))
  50. else
  51. fileName = args[3]
  52. end
  53. usage(check_number(args[1]))
  54. usage(check_number(args[2]))
  55. table.insert(numbers, tonumber(args[1]))
  56. table.insert(numbers, tonumber(args[2]))
  57. end
  58. elseif #args == 4 then
  59. if args[2] == "-" then
  60. usage(check_number(args[1]))
  61. usage(check_number(args[3]))
  62. usage(not check_number(args[4]))
  63. usage(args[1] <= args[3])
  64. for i=tonumber(args[1]), tonumber(args[3]) do
  65. table.insert(numbers, i)
  66. end
  67. fileName = args[4]
  68. else
  69. if check_number(args[4]) then
  70. table.insert(numbers, tonumber(args[4]))
  71. else
  72. fileName = args[4]
  73. end
  74. usage(check_number(args[1]))
  75. usage(check_number(args[2]))
  76. usage(check_number(args[3]))
  77. table.insert(numbers, tonumber(args[1]))
  78. table.insert(numbers, tonumber(args[2]))
  79. table.insert(numbers, tonumber(args[3]))
  80. end
  81. elseif #args > 4 then
  82. if check_number(args[#args]) then
  83. for i, v in pairs(args) do
  84. usage(check_number(v))
  85. table.insert(numbers, tonumber(v))
  86. end
  87. else
  88. for i, v in pairs(args) do
  89. if i ~= #args then
  90. usage(check_number(v))
  91. table.insert(numbers, tonumber(v))
  92. else
  93. fileName = v
  94. end
  95. end
  96. end
  97. else -- 0
  98. usage()
  99. end
  100. if #numbers > 128 then
  101. printError("Max 128 Ports can be opened at the same time")
  102. print("")
  103. usage()
  104. end
  105. end
  106. -- Loading Filter
  107. local filter = {
  108. blacklist = { },
  109. whitelist = { }
  110. }
  111. local bblacklist = false
  112. local bwhitelist = false
  113. do
  114. if fs.exists(blacklist_file_name) then
  115. bblacklist = true
  116. local file = fs.open(blacklist_file_name, "r")
  117. local blacklist_raw = file.readAll()
  118. file.close()
  119.  
  120. for i in blacklist_raw:gmatch("[%a%c%d]+") do
  121. table.insert(filter.blacklist, i)
  122. end
  123. end
  124. if fs.exists(whitelist_file_name) then
  125. bwhitelist = true
  126. local file = fs.open(whitelist_file_name, "r")
  127. local whitelist_raw = file.readAll()
  128. file.close()
  129.  
  130. for i in whitelist_raw:gmatch("[%a%c%d]+") do
  131. table.insert(filter.whitelist, i)
  132. end
  133. end
  134. end
  135. -- Checking for Modem
  136. local modem = false
  137. do
  138. if force_modem_side then
  139. if peripheral.getType(force_modem_side) == "modem" then
  140. modem = peripheral.wrap(force_modem_side)
  141. else
  142. error("Forced modem doesnt exist", 0)
  143. end
  144. else
  145. local side = peripheral.getNames()
  146. for i, v in pairs(side) do
  147. if peripheral.getType(v) == "modem" then
  148. modem = peripheral.wrap(v)
  149. end
  150. end
  151. if not modem then
  152. error("Modem expected", 0)
  153. end
  154. end
  155. end
  156.  
  157. -- Closing ports and open new
  158. modem.closeAll()
  159. for i, v in pairs(numbers) do
  160. modem.open(v)
  161. end
  162.  
  163. -- Creating new pullEvent for parallel running
  164. DONT_CHANGE = function(t)
  165. local _str = ""
  166. for i, v in pairs(t) do
  167. if type(v) == "string" or type(v) == "number" then
  168. _str = _str..i..": "..v.." | "
  169. elseif type(v) == "table" then
  170. _str = _str..DONT_CHANGE(v)
  171. end
  172. end
  173. return _str
  174. end
  175.  
  176. local create_string = function(tEvent)
  177. local str = ""
  178. str = tEvent[4] and str.."SENDER: "..tEvent[4].." | " or str
  179. str = tEvent[3] and str.."RECEIVER: "..tEvent[3].." | " or str
  180. str = tEvent[6] and str.."Range: "..tEvent[6].." | " or str
  181. if type(tEvent[5]) == "table" then
  182. tev = tEvent
  183. str = str..DONT_CHANGE(tEvent[5])
  184. if tEvent[5]["nMessageID"] then oldMessageID = tEvent[5].nMessageID end
  185. end
  186. return str
  187. end
  188.  
  189. local native_pullEvent = os.pullEventRaw
  190. oldMessageID = 0
  191. os.pullEventRaw = function(...)
  192. local tEvent = { native_pullEvent(...) }
  193.  
  194. if tEvent[1] == "modem_message" then
  195. if type(tEvent[5]) == "table" then
  196. if oldMessageID == tEvent[5].nMessageID then
  197. return table.unpack(tEvent)
  198. end
  199. end
  200. local str = create_string(tEvent)
  201. if bblacklist then
  202. for i, v in pairs(filter.blacklist) do
  203. if str:find(v) then
  204. return table.unpack(tEvent)
  205. end
  206. end
  207. end
  208. if bwhitelist then
  209. local bExit = true
  210. for i, v in pairs(filter.whitelist) do
  211. if str:find(v) then
  212. bExit = false
  213. end
  214. end
  215. if bExit then
  216. return table.unpack(tEvent)
  217. end
  218. end
  219. tev = tEvent
  220. if fileName then
  221. local file = fs.open(fileName, "a")
  222. file.writeLine(str)
  223. file.close()
  224. else
  225. print(str)
  226. end
  227. end
  228.  
  229. return table.unpack(tEvent)
  230. end
Add Comment
Please, Sign In to add comment