Portflow-Monitor
linux 端口流量监视 with Laravel
简介
主要用于 socks5
传输的一种 纯 shell
统计端口流量的可行思路,主要为了交流和学习
该分支为 laravel
分支,对原本的 shell
脚本做了一次封装
如果需要查看 纯 Shell
的脚本,请访问 Shell
分支:Shell 分支
如果因为某些原因无法成功安装 php7
和 composer
的话,推荐使用 Shell 分支,纯 Shell
脚本
安装和配置出现问题欢迎打开 issue 进行讨论和交流,欢迎提出各种建议和 PR
文件结构
-root
| -childNode
| | -dateProcessing.sh # 子节点每天生成日志的脚本
| | -generate_flowlog.sh # 子节点每小时收集的脚本
| -masterNode
| | -app
| | | -Console
| | | | -Kernel.php # 设置了计划任务
| | | -Http
| | | | -Controllers
| | | | | -MainController.php # 主要逻辑
| | | -Mail
| | | | - OrderShipped.php # 邮件发送类
| | -config
| | | -mail.php # 邮件配置
| | -resources
| | | -views
| | | | -email
| | | | | -index.blade.php # 邮件模板
| | -.env # 配置信息
安装与部署
在安装之前请确保已经安装 Composer,若未安装请参考以下指令安装
安装
在 linux/unix 下,可以使用指令yum install composer -y
(Centos 下, 别的 linux 发行版请使用相应的指令) 进行安装,
window 下参考 composerCN 的 windows 下的安装方法进行安装
设置使用 CN Composer source
$ composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
在安装之前请确保已经安装 php,且 php 版本大于 7, 若未安装请参考以下指令安装
在 CentOS7
下 yum
安装 PHP7
安装步骤如下:
MasterNode
在masterNode
文件夹下,运行指令
$ composer update
若未报错,且 masterNode
文件夹下下出现 vendor
文件夹下,则基本表示成功
复制一份 masterNode
文件夹下的 .env.example
文件,更名为 .env
在 masterNode
文件夹下,运行指令
php artisan key:generate
若未报错,且 .env
line 3 的 APP_KEY=
后面有值,类似于
APP_KEY=base64:9NJ4b06OA2GS3YAVMZ5eBu4w7EmtDuRD/u2J36ZOgG0=
,则表示成功
填写 .env
line 25 to line 31 的信息,例如
MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=yourUsername
MAIL_PASSWORD=yourPassword
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=yourEmailAddress@gmail.com // 这里是邮件发送出去显示的 from Email
MAIL_FROM_NAME=yourName // 这里是邮件发送出去显示的 from Name
** 这里如果是个人,推荐比如 sina 邮箱,gmail 会限制连续发送频率 **
填写 masterNode/config/mail.php
line 129 to line 132 的信息, e.g.
'childNode' => [
'ip' => '1.2.3.4' ,
'port'=>'22'
]
在 masterNode/app/Console/Kernel.php
line 36 行设置时间频率,即多久需要统计一次,默认为 monthlyOn(1 , '00:11')
,即 每月一号的 00:11
,如需调整,或者更换别的频率,可以参考 [laravel 手册 任务调度](https://d.laravel-china.org/docs/5.5/scheduling#Shell - 命令调度)
在 masterNode/app/Http/Controllers/MainController.php
line 30 设置需要发送的地址
$userArr = [ 1234 => 'yourEmail@gmail.com' , ];// 用户 Email 地址与端口的对应
line 37 设置需要收集的子节点的路径, 在下面 yourdir
的位置
$scpResult = shell_exec("scp -P $targetPort root@$targetIP:/yourdir/{$lastMonth}_monthlog.txt /var/log/portflowMonitor/monthLog/" );
chileNode
修改 /chileNode/generate_flowlog.sh
文件
line 5
, 默认从 /home/ssr/mudb.json
中获取需要监控的端口,如需要监控别的端口,请修改相关代码, 若需要监控的是 /home/ssr/mudb.json
则无需变动,点击 此处 参见 mudb.json
文件例示
portlist= ` cat /home/ssr/mudb.json | grep port | sed -r 's/( )+"port": //g' | sed 's/,$//g' `
修改 /chileNode/dateProcessing.sh
文件
line 15
, 因为也是从 /home/ssr/mudb.json
中获取需要监控的端口,如需要监控别的端口,请修改相关代码, 若需要监控的是 /home/ssr/mudb.json
则无需变动,点击 此处 参见 mudb.json
文件例示
代码同上
# 部署例示如下:
chileNode
文件夹内的文件放在子节点,也就是需要采集端口流量数据的服务器上
masterNode
文件夹内的文件放在主节点,也就是 scp 采集、计算流量以及发送邮件的服务器商
子节点 chileNode
将 dateProcessing.sh
和 generate_flowlog.sh
拷贝到 /root/flowCal/
文件夹下.
可以根据自身需要放在别的文件夹下,这里只是做个例示
输入指令
vim /etc/crontab
添加 两条计划任务 ,输入完成后,文件大致为这样
SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root # For details see man 4 crontabs # Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr …… # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed 0 */1 * * * root /usr/bin/sh /root/flowCal/generate_flowlog.sh 1 0 */1 * * root /usr/bin/sh /root/flowCal/dateProcessing.sh
使用 :wq 保存
主节点 masterNode
将 masterNode
拷贝到主服务器 /root/portflowMonitor/
文件夹下.
可以根据自身需要放在别的文件夹下,这里只是做个例示 如果只有一台服务器,主节点脚本和副节点脚本放在同一台服务器上的问题也不大
输入指令
vim /etc/crontab
添加 一条计划任务 ,输入完成后,文件大致为这样
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ……
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
* * * * * root /usr/bin/php /root/portflowMonitor/artisan schedule:run >> /dev/null 2>&1
使用 :wq 保存
给 masterNode/storage
文件夹下的全部文件 777 权限
chmod -R 777 /root/portflowMonitor/storage
至此,部署完成
关于项目 实现思路
& 代码解析
参见 Doc
更新计划
Null
LICENSE
MIT
版权声明:
1、该文章(资料)来源于互联网公开信息,我方只是对该内容做点评,所分享的下载地址为原作者公开地址。2、网站不提供资料下载,如需下载请到原作者页面进行下载。
3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考学习用!
4、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。