网络拓扑工具_用Golang打造一款便携式网络拓扑可视化的工具

0x01:前言之前做内网渗透测试的时候,一直想要有一款能够格式化存储收集到的信息,并且可以方便的查找出重要信息的工具。前段时间看到了Leprechaun 这个工具,给了我一些想法。由于,我对于这个工具有些不喜欢的地方。再加上好久没有写小程序练手了,于是决定自己定制一款类似的工具。有人肯定又会说是重复造轮子。其实,我觉得汽车的轮子再好用,也没办法装到自己的自行车上使用。对于使用者可能只是多...
摘要由CSDN通过智能技术生成

0x01:前言

之前做内网渗透测试的时候,一直想要有一款能够格式化存储收集到的信息,并且可以方便的查找出重要信息的工具。前段时间看到了Leprechaun 这个工具,给了我一些想法。由于,我对于这个工具有些不喜欢的地方。再加上好久没有写小程序练手了,于是决定自己定制一款类似的工具。

有人肯定又会说是重复造轮子。其实,我觉得汽车的轮子再好用,也没办法装到自己的自行车上使用。对于使用者可能只是多了一个选择,而对于编写者,则可以学到很多东西。所以,“重复造轮子”至少对于开发者意义还是很大的。

先放一张成品图吧!

29cfc284533ff5c4c6b3dfcba7178e5a.png

0x02:软件简述

本程序采用的是B/S结构开发,使用Go语言的Gin框架。考虑到经过处理后的连接记录不会太大和程序的便携性,数据库采用的sqllite。前端界面是不是看起来很熟悉?前端由于本人没有深入了学习过,所以就直接使用LogonTracer 程序的界面做了一些修改。(最开始是想参考一下,它拓扑图实现的方式的,后来觉得有些复杂,依赖太多,就放弃了)。最后,拓扑图是由 vis.js这个库实现的。

0x03:网络连接记录文件的处理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用 golang 中的 sort 包和 container 包来实现拓扑排序。具体实现步骤如下: 1. 定义一个结构体来表示有向图中的节点,包含节点的值和指向该节点的边的集合。 type Node struct { Val int Edges []*Node } 2. 定义一个函数来进行拓扑排序,该函数接受一个有向图的节点集合作为参数,并返回排序后的节点集合。 func TopologicalSort(nodes []*Node) []*Node { // 统计每个节点的入度 inDegrees := make(map[*Node]int) for _, node := range nodes { for _, edge := range node.Edges { inDegrees[edge]++ } } // 将入度为 0 的节点加入队列 queue := make([]*Node, 0) for _, node := range nodes { if inDegrees[node] == 0 { queue = append(queue, node) } } // 依次取出队列中的节点,并将其指向的节点的入度减 1 sortedNodes := make([]*Node, 0) for len(queue) > 0 { node := queue[0] queue = queue[1:] sortedNodes = append(sortedNodes, node) for _, edge := range node.Edges { inDegrees[edge]-- if inDegrees[edge] == 0 { queue = append(queue, edge) } } } return sortedNodes } 3. 创建节点并建立边的关系,然后调用 TopologicalSort 函数进行拓扑排序。 func main() { // 创建节点 node1 := &Node{Val: 1} node2 := &Node{Val: 2} node3 := &Node{Val: 3} node4 := &Node{Val: 4} node5 := &Node{Val: 5} // 建立边的关系 node1.Edges = []*Node{node2, node3} node2.Edges = []*Node{node4} node3.Edges = []*Node{node4, node5} // 进行拓扑排序 sortedNodes := TopologicalSort([]*Node{node1, node2, node3, node4, node5}) // 输出排序结果 for _, node := range sortedNodes { fmt.Printf("%d ", node.Val) } // 输出结果为:1 3 2 5 4 } 以上就是用 golang 实现拓扑排序的代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值