Skip to content

Commit

Permalink
Blocking of IP Address
Browse files Browse the repository at this point in the history
  • Loading branch information
Pakulichev committed Nov 13, 2020
1 parent b372ab0 commit f1b4c55
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 2 deletions.
5 changes: 3 additions & 2 deletions lua/init.lua
@@ -1,9 +1,9 @@
local snet = {}
local socket = require("socket")

snet._VERSION = "SNET v.1.0.0"
snet._VERSION = "SNET v.1.0.1"
snet._COPYRIGHT = "Copyright © 2020 Pavel Akulichev"
snet._DESCRIPTION = "Simple Network Module v.1.0.0"
snet._DESCRIPTION = "Simple Network Module v.1.0.1"

-- SNET Statuses Definition
SNET_DISCONNECTED = 0
Expand All @@ -18,6 +18,7 @@ SNET_BYPASS_PRIORITY = 0

-- SNET Service Packet IDs
SNET_CONFIRM_PRIORITY = 0xFFFFFFFF
SNET_BLOCK_PACKET = 0xFFFFFFFF - 1

snet.bstream = require("snet.bstream")
local server_class = require("snet.server")
Expand Down
54 changes: 54 additions & 0 deletions lua/server.lua
Expand Up @@ -8,14 +8,68 @@ server.last_ids = {}
server.events = {}
server.clients = {}
server.packets = {}
server.blacklist = {}

function server:add_event_handler(event, callback)
table.insert(self.events, {event, callback})
end

local function is_blacklisted(handle, address)
if type(address) ~= 'string' then
return false
end

for i, v in ipairs(handle.blacklist) do
if v[1] == address then
return true, i
end
end

return false
end

function server:block_address(address)
if type(address) ~= 'string' then
return false
end

for i, v in ipairs(self.blacklist) do
if v[1] == address then
return false
end
end

table.insert(self.blacklist, {address, 0})
return true
end

function server:unblock_address(address)
if type(address) ~= 'string' then
return false
end

for i, v in ipairs(self.blacklist) do
if v[1] == address then
table.remove(self.blacklist, i)
return true
end
end

return false
end

local function get_packet(object)
local data, address, port = object.socket:receivefrom()
if data and address and port then
local is_block, list_id = is_blacklisted(object, tostring(address))
if is_block then
if os.time() >= object.blacklist[list_id][2] then
object.blacklist[list_id][2] = os.time() + 60
object:send(SNET_BLOCK_PACKET, bstream.new(),
SNET_BYPASS_PRIORITY, address, port)
end
return false
end
if data:sub(1, 1):byte() ~= 0x0 then return false end
data = data:sub(2, #data)
return data, address, port
Expand Down

0 comments on commit f1b4c55

Please sign in to comment.