正在加载今日诗词....

一款优秀的开源局域网ip管理软件-IPA_VIEW

一、项目简介

项目地址:https://github.com/kiraster/IPA_VIEW_v0.1_Beta

一个使用 Flask 框架组装的IP地址管理平台,很简陋

在配置文件/app/config.py 配置好指定交换机的snmp v2c 只读团体名称后,可以定时轮询指定交换机的arp数据,将获得的ip、mac地址及轮询时间写进数据库;下一次没有轮询到的已知ip会被设置为离线状态

这样就可以拿到一份准确的局域网设备数据(包括曾短暂上线后被轮询到但之后离线的)

前端:Bootstrap、Datatable、sweetalert……

后端:Flask、APScheduler……

数据库:SQLite

二、内置功能

  • 首页:没有首页的首页
  • IP地址表:显示IP地址使用情况,可在页面进行增、删、改、导出到Excel表格
  • 分组:按分组 + 网段显示目录树,右侧显示所选择查看网段的饼图,方块表和网段IP地址表
  • 设置:查看定时任务执行情况和轮询参数;将ip子网添加到指定分组
  • 数据库:无功能,被定向到404
  • 关于:一段话

三、项目结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|   app.py  # 没什么用装个样子
| manage.py # 应用入口文件
| README.md
| requirements.txt  # 安装库
|
+---app
| | commands.py # 自定义插入组命令
| | config.py  # 配置文件
| | models.py  # 数据模型类代码
| | task.py  # 定时任务代码
| | test_data.py  # 导入测试数据
| | __init__.py
| |
| +---admin
| | | lib.py  # 可复用功能函数代码
| | | views.py  # 视图函数代码
| | | __init__.py
| |
| +---static  # CSS JS 插件
| |
| +---templates # 被渲染的html模板
| | | 404.html # 404 页面
| | |
| | \---admin
| | about.html
| | base.html
| | index.html
| | ipgroup.html
| | ipshow.html
| | settings.html
|
|
+---instance # flask db 命令自动生成的文件夹
| db.sqlite3 # sqlite3数据库文件
|
+---migrations # flask db 命令自动生成的文件夹

四、安装使用

4.1 下载源码备用

1
2
3
4
5
# git
git clone https://github.com/kiraster/IPA_VIEW_v0.1_Beta.git

# ZIP
https://github.com/kiraster/IPA_VIEW_v0.1_Beta ->> Code –>> Download ZIP

4.2 安装python并配置虚拟环境

经过热心群众测试python3.12运行本代码有错误,使用python3.10可以完美规避安装环境报错问题

1
2
3
4
5
6
7
8
9
10
11
12
# 使用venv
# 创建虚拟环境
python -m venv venv
# 进入虚拟环境
.\venv\Scripts\activate

# 使用miniconda3
# 可以miniconda安装python,使用介绍见作者博客https://kiraster.github.io/posts/f2cfb11.html
# 创建一个虚拟环境(指定Python版本3.10)
conda create -n ipa_base python=3.10
# 激活虚拟环境
conda activate ipa_base

4.3 修改配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# 定义flask代码中的配置项
class FlaskConfig:
HOST = '127.0.0.1' # 设置主机地址,'0.0.0.0' 表示监听所有可用的网络接口
PORT = 80 # 设置端口号,此处设置仅python manage.py启动有效;flask run模式参考4.5
# 开启调试模式
DEBUG = True
# 数据库连接URI
SQLALCHEMY_DATABASE_URI = 'sqlite:///db.sqlite3'
# SQLALCHEMY_TRACK_MODIFICATIONS当设置为True时,SQLAlchemy会在对数据库进行修改操作(如添加、更新、删除记录)后发出信号,
# 以便其他组件(如Flask-Migrate)能够捕获这些变化并生成相应的数据库迁移脚本。
SQLALCHEMY_TRACK_MODIFICATIONS = False
# 定义SECRET_KEY,CSRF保护需要一个密钥来安全地对令牌进行签名。
# 默认情况下,这将使用Flask应用程序的SECRET_KEY。如果想使用单独的令牌,可以设置WTF_CSRF_SECRET_KEY
SECRET_KEY = '21caf73529034bf8ad2d04e820dc2f1d'


# APScheduler配置参数
# job1 和 job2 时间建议从30改为300
class APSchedulerConfig:
# 开启API查询接口
SCHEDULER_API_ENABLED = True
job1_name = '定时轮询ARP表'
job2_name = '定时更新没有轮询到ARP表项的IP地址状态'
job1_seconds = 300
job2_seconds = 300
# 最大定时任务实例数
# 此数值是指“比如说你网络卡了30分钟以上,而前一次轮询没有完成,就会堆积到2次轮询任务,大概就是这么个意思”
SCHEDULER_MAX_INSTANCES = 66


class SNMPConfig:
# 当超过30分钟没有updated_at值更新,则available值置为False;单位:分钟
REFRESH_TIME = 30
SNMP_DATA = [
{'snmp_host': '192.168.56.10', 'snmp_community': 'public'},
{'snmp_host': '192.168.56.20', 'snmp_community': 'xswl_public'},
]

4.4 安装库

1
2
3
pip install -r requirements.txt
# 网络不行用下面这个
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ -r requirements.txt

4.5 运行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 创建当前版本的数据迁移脚本
flask db init
# 数据迁移脚本
flask db migrate
# 创建数据库
flask db upgrade

# 在IPGroup表创建一个默认组
# 输入以下命令,填写默认组组,回车使用默认值“Default”,默认组名称随意起都可
flask insert group
Name [default]:

# [可选],导入测试数据,如果可以抓到snmp数据不要导入,不然还要逐行删除
python .\app\test_data.py

# 启动应用
# 注意2种方式访问端口不一样
python manage.py
# 相关配置在class FlaskConfig中
# 或第二种办法
flask run(建议用此方式)
# 此模式启动仅支持在本机使用固定地址http://127.0.0.1:5000/admin访问,即使修改config.py中相应参数也无效。
# 若想修改默认5000端口并运行通过ip:端口方式访问,请以下面命令运行,并注意放行相关防火墙端口。
flask run -h 0.0.0.0 -p 8080
# -h 后为要监听的网络接口地址,'0.0.0.0' 表示监听所有可用的网络接口
# -p 后数字为要修改的服务端口

五、设置

5.1 ip子网手动分组

网页前端设置选项那里可以手动将ip子网(类似192.168.1.0/24)创建到新的分组里,支持中文,同时该子网在默认分组里会自动去掉,只显示你创建的分组里。

注意当某分组内子网有新设备上线后,会自动显示在默认分组中,需要手动重新添加了。

5.2 关于删除不生效

需要手动刷新网页

5.3 预览

浏览器地址栏输入:127.0.0.1/admin/ ,或者 127.0.0.1[:port]/admin/

5.4 批处理文件自启动

为了最大限度解放打工人,需要做到一键运行乃至开机即启动。

5.4.1 准备批处理运行环境

找到AnacondaPrompt(miniconda3)图标,查看图标属性并复制目标栏内内容备用

%windir%\System32\cmd.exe "/K" C:\miniconda3\Scripts\activate.bat C:\miniconda3

复制”/K”后面的内容,不要照抄,安装路径都不一定相同

C:\miniconda3\Scripts\activate.bat C:\miniconda3

5.4.2 批处理内容

为了调用miniconda3,需要在命令前加call,完整批处理内容如下,保存为bat文件即可。

1
2
3
4
5
6
@echo off
call C:\miniconda3\Scripts\activate.bat C:\miniconda3
call activate ipa_base
cd /d C:\ipa_VIEW
call python manage.py
cmd /k

仅供参考

注意:
C:\ipa_VIEW是我程序解压的位置,/d参数用于跨盘符切换

cmd /k是为了不关闭cmd窗口

运行效果如下图

六、预览截图

参考 https://kiraster.github.io/gallery/IPA_VIEW_v0.1_Beta/

后记

2024-4-9

1、可以通过scripts代码实现简单加密访问,放到index.html就行了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<SCRIPT language=JavaScript> 
function password() {
var testV = 1;
var pass1 = prompt('请输入密码:','');
while (testV < 3) {
if (!pass1)
history.go(-1);
if (pass1 == "这里输入你想设置的密码") {
alert('密码正确!');
break;
}
testV+=-1;
var pass1 = prompt('密码错误!请重新输入:');
}
if (pass1!="password" & testV ==3)
history.go(-1);
return " ";
}
document.write(password());
</SCRIPT>

2、子网添加分组后,一段时间在default组还会发现同样子网。这是因为又扫描到了新地址。作者CsiR这样回复的:

是,写入sqlite的时候没加判断,分组跑默认值去了

一款优秀的开源局域网ip管理软件-IPA_VIEW

https://bg4vrg.com/post/20240406194758.html

作者

fei

发布于

2024-04-06

更新于

2024-04-18

许可协议

评论