Lua表格过滤器IP的翻译为:Lua表格过滤IP的IP。
2012-6-18 17:36:51
收藏:0
阅读:202
评论:1
我已经将hosts文件和防火墙日志读取到表中,并过滤掉了ipv4/6和本地主机重定向,现在我在处理ipv4/6条目方面遇到了一些问题,我并不是在寻找代码,而是想知道实现我想要的方法,这是ipv4表的一个示例:
test={}
test[1]="170.83.210.219 www.test.com www.test.net"
test[2]="170.83.210.219 www.test.co.uk"
test[3]="170.83.210.219 test.org"
test[4]="170.83.210.219 www.test.com"
test[5]="170.83.300.219 170.83.300.812"
test[6]="170.83.300.219 www.test1.co.uk"
test[7]="170.83.300.219 test1.org"
test[8]="170.83.300.219 www.test1.co.uk"
预期输出将从一个新表迭代:
170.83.210.219 www.test.com www.test.net www.test.co.uk test.org
170.83.300.219 170.83.300.812 test1.org www.test1.co.uk
因此,脚本已识别出只有两个不同的IP,它只在字符串/表上放置对应的条目(如果还没有的话),这就是我所在的地方:
for i,v in pairs(test) do
local t2 = {}
for X in string.gfind (v, "[^ ]+") do
table.insert (t2, X) --splits the table values to a table
end
local mainip = table.concat(t2, "", 1, 1);
------brain dead!
end
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
为了消除重复的IP和主机,使用一个表格,其中IP地址是键,值是子表格,主机是键。
ips = {} for _,line in pairs(test) do local ip, host = line:match('(%S+)%s+(%S+)') if not ips[ip] then ips[ip] = {} end ips[ip][host] = true end你最终会得到这样一个表:
ips = { ['170.83.210.219'] = { ['www.test.com'] = true, ['test.org'] = true, ['www.test.co.uk'] = true, }, ['170.83.300.219'] = { ['test1.org'] = true, ['www.test1.co.uk'] = true, ['170.83.300.812'] = true, }, }这看起来有些奇怪——你可能更喜欢将主机列表作为数组存储(即使用1-N作为键,主机作为值,而不是使用主机作为键)——但将主机存储为键是一种非常有效的消除重复的方式。
这意味着你要像这样迭代主机:
for _,ip in pairs(ips[x]),而不是像这样:for ip,_ in pairs(ips[x])。如果您想要将结果表格以
t[ip] =“host [host ...]”的格式放在您的 OP 中提到的格式中,则可以修改程序以将每个主机存储为键(用于消除重复)和数组元素(用于将列表处理为以空格分隔的字符串)。然后,在通过数据的一次通过将任何重复项折叠之后,您需要再通过一次来创建主机字符串:ips = {} for i,v in pairs(test) do local ip, host = v:match('(%S+)%s+(%S+)') if not ips[ip] then ips[ip] = {} end if not ips[ip][host] then ips[ip][host] = true -- 这是防止重复 table.insert(ips[ip], host) -- 这是为了我们后来的串联 end end for ip,hosts in pairs(ips) do ips[ip] = table.concat(hosts, ' ') end这样得到的结果是一个表格,看起来是这样的:
ips = { ["170.83.210.219"] = "www.test.com www.test.co.uk test.org", ["170.83.300.219"] = "170.83.300.812 www.test1.co.uk test1.org", }旁注:
t={'a','b'}和t={} t[1] ='a' t[2] = b会产生相同的表。