- 67
- 25
Описание: Пропинговка SA:MP сервера
Lua:
local socket = require("socket")
local bit32 = require("bit")
function ping(ip, port)
local data
local commonPattern = generateCommonPattern(ip, port)
local udp = socket.udp()
udp:settimeout(3)
udp:setsockname("*", 0)
--
udp:sendto(commonPattern .. "i", ip, port)
data = udp:receive() -- optional
print(data) -- optional
--
udp:sendto(commonPattern .. "p" .. "aaaa", ip, port)
data = udp:receive() -- optional
print(data) -- optional
--
udp:sendto(commonPattern .. "c", ip, port)
data = udp:receive() -- optional
print(data) -- optional
--
udp:sendto(commonPattern .. "r", ip, port)
data = udp:receive() -- optional
print(data) -- optional
--
udp:close()
end
function generateCommonPattern(ip, port)
local separatedIp = explode(".", ip)
local firstPortByte = bit32.band(port, 0xFF)
local secondPortByte = bit32.band(bit32.rshift(port, 8), 0xFF)
return "SAMP" ..
string.char(separatedIp[1]) ..
string.char(separatedIp[2]) ..
string.char(separatedIp[3]) ..
string.char(separatedIp[4]) ..
string.char(firstPortByte) .. string.char(secondPortByte)
end
function explode(div, str)
if (div == "") then
return false
end
local pos, arr = 0, {}
for st, sp in function()
return string.find(str, div, pos, true)
end do
table.insert(arr, string.sub(str, pos, st - 1))
pos = sp + 1
end
table.insert(arr, string.sub(str, pos))
return arr
end
Пример использования:
Lua:
local ip, port = sampGetCurrentServerAddress()
ping(ip, port)
Что это такое и как его юзать??
Lua:
local socket = require("socket")
local bit32 = require("bit")
function ping(ip, port)
local data
local commonPattern = generateCommonPattern(ip, port)
local udp = socket.udp()
udp:settimeout(3)
udp:setsockname("*", 0)
--
udp:sendto(commonPattern .. "i", ip, port)
data = udp:receive() -- optional
print(data) -- optional
--
udp:sendto(commonPattern .. "p" .. "aaaa", ip, port)
data = udp:receive() -- optional
print(data) -- optional
--
udp:sendto(commonPattern .. "c", ip, port)
data = udp:receive() -- optional
print(data) -- optional
--
udp:sendto(commonPattern .. "r", ip, port)
data = udp:receive() -- optional
print(data) -- optional
--
udp:close()
end
function generateCommonPattern(ip, port)
local separatedIp = explode(".", ip)
local firstPortByte = bit32.band(port, 0xFF)
local secondPortByte = bit32.band(bit32.rshift(port, 8), 0xFF)
return "SAMP" ..
string.char(separatedIp[1]) ..
string.char(separatedIp[2]) ..
string.char(separatedIp[3]) ..
string.char(separatedIp[4]) ..
string.char(firstPortByte) .. string.char(secondPortByte)
end
function explode(div, str)
if (div == "") then
return false
end
local pos, arr = 0, {}
for st, sp in function()
return string.find(str, div, pos, true)
end do
table.insert(arr, string.sub(str, pos, st - 1))
pos = sp + 1
end
table.insert(arr, string.sub(str, pos))
return arr
end
Пример использования:
Lua:
local ip, port = sampGetCurrentServerAddress()
ping(ip, port)
Что это такое и как его юзать??