Scripting Lua脚本模式匹配问题

Scripting Lua脚本模式匹配问题,scripting,lua,nmap,Scripting,Lua,Nmap,首先,在整个脚本编写过程中,我一直在使用这个站点作为参考,它非常棒。我很感激这里的每个人都很有用,知识渊博。考虑到这一点,我有一个关于Lua中的匹配(模式匹配)的问题。我正在编写一个脚本,它从文件中获取输入并将其导入到表中。我正在检查文件中作为我查询的主机的特定MAC地址 if macFile then local file = io.open(macFile) if file then for line in file:lines() do loc

首先,在整个脚本编写过程中,我一直在使用这个站点作为参考,它非常棒。我很感激这里的每个人都很有用,知识渊博。考虑到这一点,我有一个关于Lua中的匹配(模式匹配)的问题。我正在编写一个脚本,它从文件中获取输入并将其导入到表中。我正在检查文件中作为我查询的主机的特定MAC地址

  if macFile then
     local file = io.open(macFile)

     if file then
    for line in file:lines() do
      local f = line
      i, j = string.find ( f, "%x+" )
      m = string.sub(f, i, j)
      table.insert( macTable, m )
    end
    file:close()
     end
这会将文件解析为我稍后查询时使用的格式。构建表后,我运行模式匹配序列,通过迭代表并根据当前迭代匹配模式,尝试从表中匹配MAC:

local output = {}
t = "00:00:00:00:00:00"
s = string.gsub( t, ":", "")
for key,value in next,macTable,nil do
        a, p = string.find ( s, value )
        matchFound = string.sub(s, a, p)
        table.insert( output, matchFound )
end

这不会返回任何输出,尽管当我在Lua提示符中逐行输入它时,它似乎可以工作。我相信变量的传递是正确的。有什么建议吗?

我刚下班,现在无法深入了解你的问题,但接下来的两行似乎很奇怪

t = "00:00:00:00:00:00"
s = string.gsub( t, ":", "")

基本上,您正在删除字符串
t
中的所有
:'
字符。之后,您的
s
将成为
“000000000000”
。这可能不是您想要的?

如果您的Mac文件使用如下结构:

012345678900
008967452301
000000000000
ffffffffffff
以下脚本应该可以工作:

macFile = "./macFile.txt"
macTable = {}

if macFile then
    local hFile = io.open(macFile, "r")
    if hFile then
        for line in hFile:lines() do
            local _,_, sMac = line:find("^(%x+)")
            if sMac then
                print("Mac address matched: "..sMac)
                table.insert(macTable, sMac)
            end
        end
        hFile:close()
    end
end

local output = {}
t = "00:00:00:00:00:00"
s = string.gsub( t, ":", "")

for k,v in ipairs(macTable) do
    if s == v then
        print("Matched macTable address: "..v)
        table.insert(output, v)
    end
end

macFile
的内容是什么?实际上,我从中导入的MAC文件是一个MAC文件,逐行导入,没有“:”。因此,我的表中填充了许多不同的条目,所有条目的格式都没有“:”。所以,为了匹配表格式,我需要设置t的格式。但是,在脚本中,变量t将自动填充。但是谢谢你的回信!您是否已验证是否能够正确解析该文件?您可以通过对k,v成对执行
(macTable)do print(k,v)end
来测试它。你能把你要解析的文件的一部分贴出来吗?非常感谢你们两位。亚当,那正是我要找的。这似乎不像一个简单的相等条件那么容易。谢谢你抽出时间。