常见网络摄像机的端口及RTSP地址

来源:https://www.jiangyu.org/port-and-rtsp-address-of-several-ipcams/

备份一下

海康威视
默认IP地址:192.168.1.64/DHCP 用户名admin 密码自己设
端口:“HTTP 端口”(默认为 80)、“RTSP 端口”(默认为 554)、“HTTPS 端 口”(默认 443)和“服务端口”(默认 8000),ONVIF端口 80。
RTSP地址:rtsp://[username]:[password]@[ip]:[port]/[codec]/[channel]/[subtype]/av_stream
说明:
username: 用户名。例如admin。
password: 密码。例如12345。
ip: 为设备IP。例如 192.0.0.64。
port: 端口号默认为554,若为默认可不填写。
codec:有h264、MPEG-4、mpeg4这几种。
channel: 通道号,起始为1。例如通道1,则为ch1。
subtype: 码流类型,主码流为main,辅码流为sub。
例如,请求海康摄像机通道1的主码流,Url如下
主码流:
rtsp://admin:12345@192.0.0.64:554/h264/ch1/main/av_stream
子码流:
rtsp://admin:12345@192.0.0.64/mpeg4/ch1/sub/av_stream

大华
默认IP地址:192.168.1.108 用户名/密码:admin/admin
端口:TCP 端口 37777/UDP 端口 37778/http 端口 80/RTSP 端口号默认为 554/HTTPs 443/ONVIF 功能默认为关闭,端口80
RTSP地址:rtsp://username:password@ip:port/cam/realmonitor?channel=1&subtype=0
说明:
username: 用户名。例如admin。
password: 密码。例如admin。
ip: 为设备IP。例如 10.7.8.122。
port: 端口号默认为554,若为默认可不填写。
channel: 通道号,起始为1。例如通道2,则为channel=2。
subtype: 码流类型,主码流为0(即subtype=0),辅码流为1(即subtype=1)。
例如,请求某设备的通道2的辅码流,Url如下
rtsp://admin:admin@10.12.4.84:554/cam/realmonitor?channel=2&subtype=1

雄迈/巨峰
默认IP地址:192.168.1.10 用户名admin 密码空
端口:TCP端口:34567 和 HTTP端口:80,onvif端口是8899
RTSP地址:rtsp://10.6.3.57:554/user=admin&password=&channel=1&stream=0.sdp?
10.6.3.57这个是被连接的设备的IP
554这个是RTSP服务的端口号,可以在设备的网络服务里面更改
user=admin这个是设备的登录用户名
password= 密码空
channel=1 第一通道
stream=0.sdp?主码流
stream=1.sdp?副码流
图片抓拍地址:http://ip/webcapture.jpg?command=snap&channel=1

天视通
默认IP地址:192.168.0.123 用户名admin 密码123456
端口:http端口80 数据端口8091 RTSP端口554 ONVIF端口 80
RTSP地址:主码流地址:rtsp://192.168.0.123:554/mpeg4
子码流地址:rtsp://192.168.0.123:554/mpeg4cif
需要入密码的地址: 主码流 rtsp://admin:123456@192.168.0.123:554/mpeg4
子码流 rtsp://admin:123456@192.168.0.123:554/mpeg4cif
图片抓拍地址:http://ip/snapshot.cgi

中维/尚维
默认IP地址:DHCP 默认用户名admin 默认密码 空
RTSP地址:rtsp://0.0.0.0:8554/live1.264(次码流)
rtsp://0.0.0.0:8554/live0.264 (主码流)

九安
RTSP地址:rtsp://IP:port(website port)/ch0_0.264(主码流)
rtsp://IP:port(website port)/ch0_1.264(子码流)

技威/YOOSEE
默认IP地址:DHCP 用户名admin 密码123
RTSP地址:主码流:rtsp://IPadr:554/onvif1
次码流:rtsp://IPadr:554/onvif2
onvif端口是5000
设备发现的端口是3702

V380
默认IP地址:DHCP 用户名admin 密码空/admin
onvif端口8899
RTSP地址:主码流rtsp://ip//live/ch00_1
子码流rtsp://ip//live/ch00_0

宇视
默认IP地址: 192.168.0.13/DHCP 默认用户名 admin 和默认密码 123456
端口:HTTP 80/RTSP 554/HTTPS 110(443)/onvif端口 80
RTSP地址:rtsp://用户名:密码@ip:端口号/video123 123对应3个码流

天地伟业
默认IP地址:192.168.1.2 用户名“Admin”、密码“1111”
onvif端口号“8080”
RTSP地址:rtsp://192.168.1.2

巨龙/JVT
默认IP地址:192.168.1.88 默认用户名 admin 默认密码admin
RTSP地址:
主码流地址:rtsp://IP地址/av0_0
次码流地址:rtsp://IP地址/av0_1
onvif端口 2000
图片抓拍地址:http://ip/capture/webCapture.jpg?channel=1&FTpsend=0&checkinfo=0
(http://ip/cgi-bin/images_cgi?channel=1&user=admin&pwd=admin)

php ubuntu 多版本安装

php 多版本安装 from ppa

https://launchpad.net/~ondrej/+archive/ubuntu/php

sudo add-apt-repository ppa:ondrej/php
sudo apt update

然后就可以用sudo apt isntall php-7.4这种方式安装对应版本php

扩展可以直接用apt install php-7.4-redis这种方式安装

不确定的扩展名可以用apt search php-版本-redis搜索包名

  • 多版本切换

如果需要多版本切换,可以使用ubuntu 的update-alternatives实现

用上面ppa的包安装的php都会作为php的候选项,比如使用命令

update-alternatives --list php
/usr/bin/php7.4
/usr/bin/php8.2

需要切换php命令的版本可以使用

update-alternatives --config php
 2 个候选项可用于替换 php (提供 /usr/bin/php)。

  选择       路径           优先级  状态
------------------------------------------------------------
* 0            /usr/bin/php8.2   82        自动模式
  1            /usr/bin/php7.4   74        手动模式
  2            /usr/bin/php8.2   82        手动模式

如果有应用不是使用apt安装的,可以使用下面的命令添加到候选项目

# 链接  名称  (实际)路径   优先级
sudo update-alternatives --install /usr/bin/vim vim /usr/bin/vim.nox 40

  • php-fpm 多版本

如果fpm也需要多版本,可以先apt安装多版本的fpm

使用systemctl start php7.4-fpm 启动对应版本的php-fpm

查看目录/etc/php/7.4/fpm/pool.d/www.conf

 listen = /run/php/php7.4-fpm.sock  //可以看到监听地址

nginx设置php文件的fastcgi=/run/php/php7.4-fpm.sock

需要切换php-fpm版本就找到对应配置的fpm监听地址,修改nginx对应网站的转发配置

PHP 对html文件进行处理

有一批静态文件需要删除一些元素,考虑使用php脚本批量处理

step1 扫描目录

use Masterminds\HTML5;
$dir = __DIR__ . '/path/to/html';
$fileNames = scandir($dir);
$html5 = new HTML5(['disable_html_ns'=> true]);

foreach ($fileNames as $fileName) {
    if (in_array($fileName, ['.', '..'])) {
        continue;
    }
    $filePath = $dir . '/' . $fileName;
    if (!is_file($filePath)) {
        continue;
    }
}

这里使用Masterminds\HTML5这个包,直接使用DOMdocument读取h5会出现问题

step2 加载文件

$document = $html5->loadHTMLFile($filePath);
$xpath = new DOMXPath($document);

step3 修改节点

clearNodes($xpath);

function clearNodes($xpath) {
    clearElements($xpath, '//div[@class="panel panel-default tab-content"]');
}

step4 保存文件

$html5->save($document, $filePath);

微信模板消息改版后发送规则

改版后发送的字段需要跟小程序订阅消息一样遵守字段规则,文档还没更新,这里记录一下,如果不按规则发送会提示参数有问题。

订阅消息参数值内容限制说明

参数类别参数说明参数值限制说明
thing.DATA事物20个以内字符可汉字、数字、字母或符号组合
number.DATA数字32位以内数字只能数字,可带小数
letter.DATA字母32位以内字母只能字母
symbol.DATA符号5位以内符号只能符号
character_string.DATA字符串32位以内数字、字母或符号可数字、字母或符号组合
time.DATA时间24小时制时间格式(支持+年月日),支持填时间段,两个时间点之间用“~”符号连接例如:15:01,或:2019年10月1日 15:01
date.DATA日期年月日格式(支持+24小时制时间),支持填时间段,两个时间点之间用“~”符号连接例如:2019年10月1日,或:2019年10月1日 15:01
amount.DATA金额1个币种符号+10位以内纯数字,可带小数,结尾可带“元”可带小数
phone_number.DATA电话17位以内,数字、符号电话号码,例:+86-0766-66888866
car_number.DATA车牌8位以内,第一位与最后一位可为汉字,其余为字母或数字车牌号码:粤A8Z888挂
name.DATA姓名10个以内纯汉字或20个以内纯字母或符号中文名10个汉字内;纯英文名20个字母内;中文和字母混合按中文名算,10个字内
phrase.DATA汉字5个以内汉字5个以内纯汉字,例如:配送中
enum.DATA枚举值只能上传枚举值范围内的字段值调用接口获取参考枚举值

符号表示除中文、英文、数字外的常见符号,不能带有换行等控制字符。 时间格式支持HH:MM:SS或者HH:MM。 日期包含年月日,为y年m月d日,y年m月、m月d日格式,或者用‘-’、‘/’、‘.’符号连接,如2018-01-01,2018/01/01,2018.01.01,2018-01,01-01。 每个模板参数都会以类型为前缀,例如第一个数字模板参数为number01.DATA,第二个为number02.DATA

wsl 静态ip启动

添加文件

/etc/profile.d/static-ip.sh

ip addr del $(ip addr show eth0 | grep 'inet\b' | awk '{print $2}' | head -n 1) dev eth0
ip addr add 192.168.1.177/24 broadcast 192.168.1.255 dev eth0
ip route add 0.0.0.0/0 via 192.168.1.1 dev eth0

重启后就会按照192.168.1.177这个ip启动了

wsl连接的虚拟网卡使用hyper-v管理器设置为直接连接外部网络

微信支付v3对接

证书解析链接,查看证书序列号 https://myssl.com/cert_decode.html

平台证书获取

php版本工具 https://github.com/wechatpay-apiv3/wechatpay-php

composer 安装后,进入bin目录

执行命令

php CertificateDownloader.php -k ${apiV3key} -m ${mchId} -f ${mchPrivateKeyFilePath} -s ${mchSerialNo} -o ${outputFilePath}

mchSerialNo用上面提供的解析工具解析获得序列号

mchId 商户号

swoole协程通信

之前一直看文档说协程之间通信可以用通道实现,但是都只是说可以用通道推数据和读数据,没有提到怎么同步保存数据

花了很多时间调试修改,实现了一下使用一个数据处理协程对数据进行读写,保存到协程上下文

<?php
use Swoole\Coroutine;

use function Swoole\Coroutine\run;
use function Swoole\Coroutine\go;



run(function() {
    //写通道,供生产者写入数据
    $channelWrite = new Coroutine\Channel(1);
    //读通道,供消费者读取数据
    $channelRead = new Coroutine\Channel(1);

    //数据处理协程
    go(function () use ($channelWrite, $channelRead) {
        //用这个协程的上下文存储数据
        $pcid =Coroutine::getCid();
        $context = Coroutine::getContext($pcid);
        $context['count'] = [];
        go(function() use ($channelWrite, $pcid) {
            //用父协程id获取上下文,直接传数据数据修改不会同步
            $context = Coroutine::getContext($pcid);
            //从写通道读取数据,放入父协程上下文保存
            while(true) {
                $data = $channelWrite->pop();
                if (!$data) {
                    break;
                }
                $context['count'] = $data;
            }
        });
        go(function() use ($channelRead, $pcid) {
            //用父协程id获取上下文,直接传数据数据修改不会同步
            $context = Coroutine::getContext($pcid);
            //从父协程上下文获取实时数据,传入读通道,供消费协程使用
            while(true) {
                $res = $channelRead->push($context['count']);
                if (!$res) {
                    break;
                }
            }
        });
    });

    // 多个消费者协程和数据生产协程
    go (function() use ($channelRead, $channelWrite) {
        for ($i = 0; $i < 100; $i++) {
            Coroutine::sleep(1);
            if ($i % 2 == 0) {
                $data = $channelRead->pop();
                echo '读数据:', PHP_EOL;
                print_r($data);
            } else {
                $channelWrite->push(array_fill(0, 5, $i));
                echo '写入数据:'.$i, PHP_EOL;
            }
        }
        $channelRead->close();
        $channelWrite->close();
        echo '关闭通道';
    });
});

还需要对读写协程上下文做一个读写锁,应该就可以保证数据一致性

<?php
use Swoole\Coroutine;
use Swoole\Lock;
use Swoole\Timer;

use function Swoole\Coroutine\run;
use function Swoole\Coroutine\go;



run(function() {
    $channelWrite = new Coroutine\Channel(1);
    $channelRead = new Coroutine\Channel(1);

    //数据处理协程
    go(function () use ($channelWrite, $channelRead) {
        //用这个协程的上下文存储数据
        $pcid =Coroutine::getCid();
        $context = Coroutine::getContext($pcid);
        $context['count'] = 0;

        //读写锁
        $lock = new Lock(SWOOLE_RWLOCK);


        go(function() use ($channelWrite, $pcid, $lock) {
            //用父协程id获取上下文,直接传数据数据不一致
            $context = Coroutine::getContext($pcid);
            //从写通道读取数据,放入父协程上下文保存
            while(true) {
                $data = $channelWrite->pop();
                if (!$data) {
                    break;
                }
                // echo '写入数据(等写锁)', PHP_EOL;
                $lock->lock();
                $context['count'] = $data;
                // echo '写入数据', PHP_EOL;
                $lock->unlock();
            }
        });
        go(function() use ($channelRead, $pcid, $lock) {
            //用父协程id获取上下文,直接传数据数据不一致
            $context = Coroutine::getContext($pcid);
            //从父协程上下文获取实时数据,传入读通道,供消费协程使用
            while(true) {
                // echo '读取数据(等读锁)', PHP_EOL;
                $lock->lock_read();
                $data = $context['count'];
                // echo '读取数据完成', PHP_EOL;
                $lock->unlock();
                $res = $channelRead->push($data);
                if (!$res) {
                    break;
                }
            }
        });
    });

    // 多个消费者协程和数据生产协程
    go (function() use ($channelRead, $channelWrite) {
        Timer::tick(1000, function() use ($channelRead) {
            $data = $channelRead->pop();
            echo date('[i:s]') . '读数据:' . $data, PHP_EOL;
        });
        for ($i = 1; $i < 10; $i++) {
            Coroutine::sleep(1.5);
            $channelWrite->push($i);
            echo date('[i:s]') . '写入数据:'.$i, PHP_EOL;
        }
    });
});

输出

[00:11]读数据:0
[00:11]写入数据:1
[00:12]读数据:0
[00:13]读数据:0
[00:13]写入数据:2
[00:14]读数据:1
[00:14]写入数据:3
[00:15]读数据:1
[00:16]读数据:2
[00:16]写入数据:4
[00:17]读数据:3
[00:17]写入数据:5
[00:18]读数据:3
[00:19]读数据:4
[00:19]写入数据:6
[00:20]读数据:5
[00:20]写入数据:7
[00:21]读数据:5
[00:22]读数据:6
[00:22]写入数据:8
[00:23]读数据:7
[00:23]写入数据:9
[00:24]读数据:7
[00:25]读数据:8
[00:26]读数据:9
[00:27]读数据:9
[00:28]读数据:9
[00:29]读数据:9
[00:30]读数据:9
[00:31]读数据:9
[00:32]读数据:9

虚商名单-备份

第一批11家2013.12.26

  1. 巴士在线控股有限公司 江西 中麦通信 1709号卡业务 联通
  2. 北京北纬通信科技股份有限公司 北京 蜂巢互联 WLAN转售 移动、电信
  3. 北京迪信通通信服务有限公司 北京 迪加 1700/1705/1709号卡业务 移动、联通、电信
  4. 北京分享在线网络技术有限公司 北京 分享通信 1700/1705/1709号卡业务 移动、联通、电信
  5. 北京华翔联信科技有限公司 北京 华翔联信 1705/1709号卡业务 移动、联通
  6. 北京京东叁佰陆拾度电子商务有限公司 北京 京东通信 1700/1709号卡业务 联通、电信
  7. 北京乐语世纪通讯设备连锁有限公司 北京 乐语通讯 1700/1709号卡业务 联通、电信
  8. 北京万网志成科技有限公司 北京 阿里通信 1700/1705/1709号卡业务 移动、联通、电信
  9. 天音通信有限公司 广东 天音移动 1700/1705/1709号卡业务 移动、联通、电信
  10. 话机世界数码连锁集团股份有限公司 浙江 话机通信 1700/1709号卡业务 联通、电信
  11. 浙江连连科技有限公司 浙江 无限互联 1700号卡业务 电信

第二批8家2014.1.29

  1. 苏州蜗牛数字科技股份有限公司 江苏 蜗牛移动 1700/1705/1709号卡业务 移动、联通、电信
  2. 中期集团有限公司 北京 中期移动 1709号卡业务 联通
  3. 北京国美电器有限公司 北京 极信通信 1700/1705/1709号卡业务 移动、联通、电信
  4. 厦门三五互联科技股份有限公司 福建 三五财富卡 1700号卡业务 电信
  5. 深圳市爱施德股份有限公司 广东 U.友 1700/1705/1709号卡业务 移动、联通、电信
  6. 远特(北京)通信技术有限公司 北京 信时空 1709号卡业务 联通
  7. 长江时代通信股份有限公司 上海 长江移动 1700号卡业务 电信
  8. 苏宁云商集团股份有限公司 江苏 苏宁互联 1700/1705/1709号卡业务 移动、联通、电信

第三批6家2014.8.25

  1. 贵阳朗玛信息技术股份有限公司 贵州 朗玛移动 1700/1705号卡业务 移动、电信
  2. 深圳市中兴视通科技有限公司 广东 酷信170 1705号卡业务 移动
  3. 用友移动通信技术服务有限公司 北京 用友通信 1700号卡业务 电信
  4. 中邮世纪(北京)通信技术有限公司 北京 普泰移动 1705号卡业务 移动
  5. 北京世纪互联宽带数据中心有限公司 北京 世纪互联 移动
  6. 银盛电子支付科技有限公司 广东 银盛通信 1705号卡业务 移动

第四批8家2014.11.21

  1. 红豆集团有限公司 江苏 红豆电信 1709号卡业务 联通
  2. 深圳星美圣典文化传媒集团有限公司 广东 星美生活 1700号卡业务 电信
  3. 合一信息技术(北京)有限公司 北京 优酷 联通
  4. 青岛日日顺网络科技有限公司 山东 日日顺通信 电信
  5. 北京青牛科技有限公司 北京 青牛软件 联通
  6. 小米科技有限责任公司 北京 小米通信 联通、电信
  7. 郑州市讯捷贸易有限公司 河南 郑州讯捷 电信
  8. 二六三网络通信股份有限公司 北京 263网络通信 联通

第五批8家2014.12.18

  1. 海南海航信息技术有限公司 海南 海南航空 联通、电信
  2. 北京联想调频科技有限公司 北京 联想集团 电信
  3. 广东恒大和通信科技股份有限公司 广东 恒大和通信 联通
  4. 青岛丰信通信有限公司 山东 海信通信 电信
  5. 凤凰资产管理有限公司 北京 网信移动 电信
  6. 深圳平安通信科技有限公司 广东 平安通信 联通、电信
  7. 民生电子商务有限责任公司 广东 民生电商 联通、电信
  8. 鹏博士电信传媒集团股份有限公司 北京 长城移动 1705号卡业务、宽带业务 移动

freeswitch 暴力破解防范

1、freeswitch配置

autoload_configs/logfile.conf.xml

<!--日志保存位置 -->
<param name="logfile" value="/var/log/freeswitch/freeswitch.log"/>
<!-- 避免日志格式带uuid -->
<param name="uuid" value="false" />

sip_profiles/internal.xml

<param name="log-auth-failures" value="true"/>

2、fail2ban配置

jail.d/freeswitch.local

[freeswitch]
enabled = true
filter = %(known/filter)s[_pref_line='(?: [\d\.]+%%%%)?']
logpath = /var/log/freeswitch/freeswitch.log

maxretry  =   4    ; for a total of five failures
findtime  =  3600  ; based on empirical testing
bantime   =  12000  ; ban for 20 minutes

port = 10777,10888

注意filter这里,针对日志里面出现的cpu使用率进行了匹配,如果不修改,会无法进行匹配

https://github.com/fail2ban/fail2ban/issues/3143

日志大概长这样

2023-08-07 21:15:19.934499 94.93% [DEBUG] switch_core_state_machine.c:745 (sofia/internal/1186@10.0.8.4) State DESTROY going to sleep
2023-08-07 21:15:22.514509 94.53% [NOTICE] switch_channel.c:1123 New Channel sofia/internal/50008@10.0.8.4 [256f87af-b4de-412d-b104-0fe2e70de0d7]
2023-08-07 21:15:22.514509 94.53% [DEBUG] switch_core_state_machine.c:581 (sofia/internal/50008@10.0.8.4) Running State Change CS_NEW (Cur 1 Tot 3824)
2023-08-07 21:15:22.514509 94.53% [INFO] sofia.c:10453 sofia/internal/50008@10.0.8.4 receiving invite from 104.192.2.154:56336 version: 1.10.9 -release.15 64bit call-id: 1389302581-2084378217-762528399
2023-08-07 21:15:22.514509 94.53% [DEBUG] sofia.c:10547 verifying acl "domains" for ip/port 104.192.2.154:0.
2023-08-07 21:15:22.514509 94.53% [DEBUG] switch_core_state_machine.c:600 (sofia/internal/50008@10.0.8.4) State NEW
2023-08-07 21:15:22.514509 94.53% [DEBUG] sofia.c:2419 detaching session 256f87af-b4de-412d-b104-0fe2e70de0d7
2023-08-07 21:15:22.774503 94.53% [DEBUG] sofia.c:2532 Re-attaching to session 256f87af-b4de-412d-b104-0fe2e70de0d7
2023-08-07 21:15:22.774503 94.53% [INFO] sofia.c:10453 sofia/internal/50008@10.0.8.4 receiving invite from 104.192.2.154:56336 version: 1.10.9 -release.15 64bit call-id: 1389302581-2084378217-762528399
2023-08-07 21:15:22.774503 94.53% [DEBUG] sofia.c:10547 verifying acl "domains" for ip/port 104.192.2.154:0.
2023-08-07 21:15:22.814503 94.53% [ERR] switch_xml.c:1770 Error[[error near line 1]: root tag missing]
2023-08-07 21:15:22.814503 94.53% [WARNING] sofia_reg.c:3211 Can't find user [50008@10.0.8.4] from 104.192.2.154

3、启动fail2ban

systemctl restart fail2ban

# fail2ban相关命令
fail2ban-regex  # 用来测试正则是否能命中日志
fail2ban-client # 客户端用来查看jail状态实时设置参数

有个需要注意的问题,一个ip被ban到jail后,如果连接没有断开,虽然ip已经被防火墙ban了,还是可以持续访问,除非ban前的连接断开