GB28181开源项目WVP部署详细流程

news2024/9/20 12:32:33

请添加图片描述

开箱即用的的28181协议视频平台

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HcH0Aobk-1674895367480)(null)] [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EmrNYHcL-1674895367646)(null)] [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-40aBxGbL-1674895367515)(null)] [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aMLQ4era-1674895369952)(null)] [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-71nGuB3y-1674895366971)(null)]

WEB VIDEO PLATFORM是一个基于GB28181-2016标准实现的开箱即用的网络视频平台,负责实现核心信令与设备管理后台部分,支持NAT穿透,支持海康、大华、宇视等品牌的IPC、NVR接入。支持国标级联,支持将不带国标功能的摄像机/直播流/直播推流转发到其他国标平台。

流媒体服务基于@夏楚 ZLMediaKit https://github.com/ZLMediaKit/ZLMediaKit
播放器使用@dexter jessibuca https://github.com/langhuihui/jessibuca/tree/v3
前端页面基于@Kyle MediaServerUI https://gitee.com/kkkkk5G/MediaServerUI 进行修改.

流媒体部署文档

一,启动Mysql,Redis

1.启动Mysql

运行mysql

$ docker pull mysql:8.0.29

docker run -p 33060:3306 --name mysql -v mysqlData:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:8.0.29

docker run -it -p 33060:3306 --name mysql -v mysqlData:/var/lib/mysql -v /root/home/zhangcn3/wvp.sql:/docker-entrypoint-initdb.d/wvp.sql -e MYSQL_ROOT_PASSWORD=root mysql:8.0.29

docker exec mysql sh -c 'exec mysqldump --databases wvp -uroot -p"$MYSQL_ROOT_PASSWORD"' > /root/wvp.sql

导入sql文件

  • 创建 wvp 库
  • 执行 wvp.sql 文件创建数据库表
1. $ docker run -d -p 33060:3306 --name mysql -v mysqlData:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=1qaz2wsx3edc mysql:8.0.29

2. $ docker cp /root/wvp.sql mysql:/root/
3. $ docker exec -it mysql /bin/bash
4. $ mysql -uroot -proot
5. $ create database wvp;
6. $ use wvp;
7. $ source /root/wvp.sql
8. $ ctrl + pq
9. # 删除容器,保留数据卷

docker exec -it my /bin/bash

2.配置启动Redis

$ docker pull redis:4.0.14

$ docker run --name redis -d -p 6379:6379 -v redisData:/data redis:4.0.14 redis-server --appendonly yes

二,将WVP项目构建镜像

官方镜像 https://hub.docker.com/r/648540858/wvp_pro

编写Dockerfile

FROM openjdk:8u171
WORKDIR /app
COPY ./wvp-pro-2.3.2.jar wvp-pro-2.3.2.jar
EXPOSE 18081/tcp
EXPOSE 5060/tcp
EXPOSE 5060/udp
EXPOSE 18082/tcp
ENTRYPOINT ["/bin/sh", "-c", "cd /app && java ${JAVA_OPTS} -jar  wvp-pro-2.3.2.jar"]

映射配置文件构建镜像

FROM openjdk:8u171
COPY ./wvp-pro-2.3.2.jar wvp-pro-2.3.2.jar
COPY ./application.yml /data/java/config/application.yml
EXPOSE 18081/tcp
EXPOSE 5060/tcp
EXPOSE 5060/udp
EXPOSE 18082/tcp
ENTRYPOINT ["java","-jar","wvp-pro-2.3.2.jar","--spring.config.location=/data/java/config/application.yml"]

构建镜像

docker build -t hub.brain.zcn.com/wvp/wvp-pro-release:v1.0 .

运行镜像

docker run -it -P --network host --rm hub.brain.zcn.com/wvp/wvp-pro-release:v1.0

docker run -it -p 18081:18081 -p 18082:18082 -p 5060:5060 -p 5060:5060/udp --name wvp hub.brain.zcn.com/wvp/wvp-pro-release:v1.0

docker run -it -p 18081:18081 -p 18082:18082 -p 5060:5060 -p 5060:5060/udp --name wvp -e JAVA_OPTS="-Dwvp.ip=10.110.156.68 -Dwvp.mysql.ip=10.110.156.68 -Dwvp.redis.ip=10.110.156.68 -Dwvp.extranet.ip=10.110.156.68" hub.brain.zcn.com/wvp/wvp-pro-release:v1.0

使用的端口

端口类型描述
6080tcpzlm的http端口
554tcp&udpzlm的rtsp端口,非必须
1935tcpzlm的rtmp端口,非必须
5060tcp&udp28181 sip信令端口
18081tcpwvp的http端口
18082tcp录像管理服务端口,非必须
30000-30500tcp&udpzlm接收视频推流端口

摄像头视频管理平台 WVP地址:http://ip:18081/#/streamProxyList
用户名/密码:

超级管理员:admin/QAZwsx123…
普通管理员:guest/guest

三.部署ZLMediaKit流媒体服务

1.获取代码

# 国内用户推荐从同步镜像网站gitee下载 
git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit
cd ZLMediaKit
# 千万不要忘记执行这句命令
git submodule update --init

2.构建镜像

Dockerfile

CentOs

ARG Version=7

FROM centos:${Version} As build

ARG HTTP_PROXY=${NO_PROXY}
ARG HTTPS_PROXY=${NO_PROXY}
ARG PKG_CONFIG_VERSION=0.29.2
ARG CMAKE_VERSION=3.18
ARG CMAKE_FULL_VERSION=3.18.4
ARG YASM_VERSION=1.3.0
ARG NASM_VERSION=2.15.05
ARG X265_VERSION=3.4

RUN yum install -y  \
        gcc \
        gcc-c++ \
        kernel-devel \
        kernel-headers \
        openssl \
        openssl-devel \
        git \
        wget \
        which
    
WORKDIR /opt

RUN wget --no-check-certificate -e "https_proxy=${HTTPS_PROXY}" https://pkgconfig.freedesktop.org/releases/pkg-config-${PKG_CONFIG_VERSION}.tar.gz   \
    && tar -zxvf pkg-config-${PKG_CONFIG_VERSION}.tar.gz \
    && cd pkg-config-${PKG_CONFIG_VERSION} \
    && ./configure --with-internal-glib \
    && make -j8 \
    && make install

RUN wget -e "https_proxy=${HTTPS_PROXY}" https://cmake.org/files/v${CMAKE_VERSION}/cmake-${CMAKE_FULL_VERSION}.tar.gz \
    && tar -zxvf cmake-${CMAKE_FULL_VERSION}.tar.gz \
    && cd cmake-${CMAKE_FULL_VERSION} \
    && ./bootstrap \
    && gmake -j8 \
    && gmake install 

RUN cd /opt \
    &&  wget -e "https_proxy=${HTTPS_PROXY}" http://www.tortall.net/projects/yasm/releases/yasm-${YASM_VERSION}.tar.gz \
    && tar zxvf yasm-${YASM_VERSION}.tar.gz \
    && cd yasm-${YASM_VERSION} \
    &&  ./configure \
    && make -j8 \
    && make install

RUN wget --no-check-certificate -e "https_proxy=${HTTPS_PROXY}" https://www.nasm.us/pub/nasm/releasebuilds/2.15.05/nasm-${NASM_VERSION}.tar.xz \
    && tar -xvJf nasm-${NASM_VERSION}.tar.xz \
    && cd nasm-${NASM_VERSION} \
    && ./configure --disable-shared --enable-static \
    && make -j8 \
    && make install

RUN cd /opt \
    && git clone https://code.videolan.org/videolan/x264.git \
    && cd x264 \
    && git checkout -b stable origin/stable \
    && git pull --rebase \
    && ./configure --enable-pic --enable-shared --disable-asm \
    && make -j8 \ 
    && make install \
    && export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH

RUN cd /opt \
    && wget -e "https_proxy=${HTTPS_PROXY}" https://github.com/videolan/x265/archive/Release_${X265_VERSION}.tar.gz  \
    && tar zxvf Release_${X265_VERSION}.tar.gz \
    && cd x265-Release_${X265_VERSION}/build/linux \
    && cmake ../../source \
    && make -j8 \
    && make install \
    && export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH

RUN cd /opt \
    && git clone https://gitee.com/xia-chu/FFmpeg.git \
    && cd /opt/FFmpeg \
    && export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH \
    && ./configure \
        --disable-debug \
        --disable-doc  \
        --disable-shared  \
        --enable-gpl \
        --enable-version3 \
        --enable-static \
        --enable-nonfree \
        --enable-pthreads \
        --enable-libx264 \
        --enable-libx265 \
        --enable-small \
        --pkgconfigdir=/usr/local/lib/pkgconfig \
	    --pkg-config-flags="--static" \
    && make -j8 \
    && make install

RUN cd /opt \
    && git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit.git \
    && cd ZLMediaKit \
    && git submodule update --init \
    && mkdir -p build release/linux/Release/ \
    && cd build \
    && cmake -DCMAKE_BUILD_TYPE=Release .. \
    && make -j8

RUN mkdir -p /opt/build/opt/zlm/ /opt/build/usr/local/bin/ /opt/build/usr/bin/  /opt/build/usr/local/lib/ /opt/build/etc/localtime \
    && cd /opt/build \
    && /usr/bin/cp -ip /usr/local/lib/libx26* ./usr/local/lib \
    && /usr/bin/cp -ip /usr/local/bin/ffmpeg ./usr/local/bin \
    && /usr/bin/cp -ip /opt/ZLMediaKit/release/linux/Release/MediaServer ./opt/zlm/ \
    && /usr/bin/cp -irp /opt/ZLMediaKit/release/linux/Release/www ./opt/zlm/ \
    && /usr/bin/cp -ip /usr/bin/which ./usr/bin/
## /usr/bin/cp -ip /opt/ZLMediaKit/tests/ssl.p12 ./opt/zlm/ \
FROM centos:${Version}
LABEL maintainer="chengxiaosheng <kevin__cheng@outlook.com>" project-url="https://github.com/xia-chu/ZLMediaKit" description="一个基于C++11的高性能运营级流媒体服务框架"

EXPOSE 9000/tcp \
 1935/tcp \
 19350/tcp \
 554/tcp \
 322/tcp \
 80/tcp \
 443/tcp \
 10000/udp \
 10000/tcp

WORKDIR /opt/zlm
VOLUME [ "/opt/zlm/conf/","/opt/zlm/log/","opt/zlm/ffmpeg/"]
COPY --from=build /opt/build /
ENV LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH TZ=Asia/Shanghai
CMD ./MediaServer -c ./conf/config.ini

ubuntu

FROM ubuntu:18.04
#shell,rtmp,rtsp,rtsps,http,https,rtp
EXPOSE 9000/tcp
EXPOSE 1935/tcp
EXPOSE 554/tcp
EXPOSE 322/tcp
EXPOSE 80/tcp
EXPOSE 443/tcp
EXPOSE 10000/udp
EXPOSE 10000/tcp
EXPOSE 30000-30500/tcp
EXPOSE 30000-30500/udp

RUN apt-get update && \
         DEBIAN_FRONTEND="noninteractive" \
         apt-get install -y --no-install-recommends \
         build-essential \
         cmake \
         git \
         curl \
         vim \
         ca-certificates \
         tzdata \
         libssl-dev \
         libmysqlclient-dev \
         libx264-dev \
         libfaac-dev \
         ffmpeg \
         libmp4v2-dev && \
         apt-get autoremove -y && \
         apt-get clean -y && \
    rm -rf /var/lib/apt/lists/*

RUN mkdir -p /opt/media

WORKDIR /opt/media
RUN git clone --depth=1 https://gitee.com/xia-chu/ZLMediaKit && \
    cd ZLMediaKit && git submodule update --init --recursive && \
    mkdir -p build release/linux/Release/

WORKDIR /opt/media/ZLMediaKit/build
RUN cmake -DCMAKE_BUILD_TYPE=Release .. && \
    make

ENV PATH /opt/media/ZLMediaKit/release/linux/Release:$PATH
CMD MediaServer

构建镜像

== CentOs ==
docker build -t hub.brain.lenovo.com/wvp/zlmediakit:1.0.0

== ubuntu ==
docker build -t hub.brain.lenovo.com/wvp/zlmediakit:1.0.0-ubuntu18.04

3.修改配置

config.ini

; auto-generated by mINI class {

[api]
apiDebug=1
defaultSnap=./www/logo.png
secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc
snapRoot=./www/snap/

[cluster]
origin_url=
retry_count=3
timeout_sec=15

[ffmpeg]
bin=/usr/bin/ffmpeg
cmd=%s -fflags nobuffer -i %s -c:a aac -strict -2 -ar 44100 -ab 48k -c:v libx264  -f flv %s
log=./ffmpeg/ffmpeg.log
restart_sec=0
snap=%s -i %s -y -f mjpeg -t 0.001 %s

[general]
addMuteAudio=1
check_nvidia_dev=1
continue_push_ms=3000
enableVhost=0
enable_audio=1
enable_ffmpeg_log=0
flowThreshold=1024
fmp4_demand=0
hls_demand=0
maxStreamWaitMS=15000
mediaServerId=FQ3TF8yT83wh5Wvz
mergeWriteMS=0
modifyStamp=0
publishToHls=1
publishToMP4=0
resetWhenRePlay=1
rtmp_demand=0
rtsp_demand=0
streamNoneReaderDelayMS=15000
ts_demand=0
unready_frame_cache=100
wait_add_track_ms=3000
wait_track_ready_ms=3000

[hls]
broadcastRecordTs=0
deleteDelaySec=0
fileBufSize=65536
filePath=./www
segDur=2
segKeep=0
segNum=3
segRetain=5

[hook]
admin_params=secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc
alive_interval=10.0
enable=1
on_flow_report=http://10.110.131.204:18081/index/hook/on_flow_report
on_http_access=http://10.110.131.204:18081/index/hook/on_http_access
on_play=http://10.110.131.204:18081/index/hook/on_play
on_publish=http://10.110.131.204:18081/index/hook/on_publish
on_record_mp4=http://127.0.0.1:18082/api/record/on_record_mp4
on_record_ts=http://10.110.131.204:18081/index/hook/on_record_ts
on_rtsp_auth=http://10.110.131.204:18081/index/hook/on_rtsp_auth
on_rtsp_realm=http://10.110.131.204:18081/index/hook/on_rtsp_realm
on_send_rtp_stopped=http://10.110.131.204:18081/index/hook/on_send_rtp_stopped
on_server_keepalive=http://10.110.131.204:18081/index/hook/on_server_keepalive
on_server_started=http://10.110.131.204:18081/index/hook/on_server_started
on_shell_login=http://10.110.131.204:18081/index/hook/on_shell_login
on_stream_changed=http://10.110.131.204:18081/index/hook/on_stream_changed
on_stream_none_reader=http://10.110.131.204:18081/index/hook/on_stream_none_reader
on_stream_not_found=http://10.110.131.204:18081/index/hook/on_stream_not_found
retry=1
retry_delay=3.0
timeoutSec=20

[http]
charSet=utf-8
dirMenu=1
forbidCacheSuffix=
forwarded_ip_header=
keepAliveSecond=30
maxReqSize=40960
notFound=<html><head><title>404 Not Found</title></head><body bgcolor="white"><center><h1>您访问的资源不存在!</h1></center><hr><center>ZLMediaKit(git hash:00c9749,branch:master,build time:Sep  5 2022 06:45:26)</center></body></html>
port=6080
rootPath=./www
sendBufSize=65536
sslport=8443
virtualPath=

[multicast]
addrMax=239.255.255.255
addrMin=239.0.0.0
udpTTL=64

[record]
appName=record
fastStart=0
fileBufSize=65536
filePath=./www
fileRepeat=0
fileSecond=3600
mp4_as_player=0
sampleMS=500

[rtc]
externIP=
port=8000
preferredCodecA=PCMU,PCMA,opus,mpeg4-generic
preferredCodecV=H264,H265,AV1X,VP9,VP8
rembBitRate=0
timeoutSec=15

[rtmp]
handshakeSecond=15
keepAliveSecond=15
modifyStamp=0
port=1935
sslport=0

[rtp]
audioMtuSize=600
rtpMaxSize=10
videoMtuSize=1400

[rtp_proxy]
dumpDir=
g711a_pt=8
g711u_pt=0
h264_pt=98
h265_pt=99
opus_pt=100
port=10000
port_range=30000-30500
ps_pt=96
timeoutSec=15
ts_pt=33

[rtsp]
authBasic=0
directProxy=1
handshakeSecond=15
keepAliveSecond=15
port=554
sslport=0

[shell]
maxReqSize=1024
port=0

[srt]
latencyMul=4
pktBufSize=8192
port=9000
timeoutSec=5

; } ---

4.运行镜像

== CentOs ==
docker run -it -p 1935:1935 -p 6080:6080 -p 8443:443 -p 8554:554 -p 10000:10000 -p 10000:10000/udp -p 9000:9000/udp -p 30000-30500:30000-30500/udp -p 30000-30500:30000-30500/tcp -v zlmConfig:/opt/zlm/conf --name zlm hub.brain.lenovo.com/wvp/zlmediakit:1.0.0

== ubuntu ==
docker run -it -p 1935:1935 -p 6080:6080 -p 8443:443 -p 8554:554 -p 10000:10000 -p 10000:10000/udp -p 9000:9000/udp -p 30000-30500:30000-30500/udp -p 30000-30500:30000-30500/tcp -v zlmConfig:/opt/media/ZLMediaKit/release/linux/Release --name zlm hub.brain.lenovo.com/wvp/zlmediakit:1.0.0-ubuntu18.04

== 加授权 ==
docker run -it -p 1935:1935 -p 6080:6080 -p 8443:443 -p 8554:554 -p 10000:10000 -p 10000:10000/udp -p 9000:9000/udp -p 30000-30500:30000-30500/udp -p 30000-30500:30000-30500/tcp -v zlmConfig:/opt/media/ZLMediaKit/release/linux/Release -v /root/.hasplm/hasp_33090.ini:/root/.hasplm/hasp_33090.ini --name zlm hub.brain.lenovo.com/wvp/zlmediakit:1.0.1-ubuntu18.04

四,配置摄像头

1.配置摄像头

2.配置nvr

3.级联平台配置

五,Docker compose

1.安装compose

# 2-1.修改文件名
$ mv docker-compose-Linux-x86_64 docker-compose
# 2-2.将dockedr-compose 移动到/usr/local/bin/目录下
$ mv docker-compose /usr/local/bin/
# 2-3.将docker-compose赋予执行权限
$ chmod +x /usr/local/bin/docker-compose
# 2-4.查看版本
$ docker-compose -v

2.编写 docker compose.yml

version: "3.0"

services:
  mysql:
    image: mysql:8.0.29
    container_name: mysqls
    ports:
      - "33060:3306"
    volumes:
      - mysqlData:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: 1qaz2wsx3edc
    networks:
      - wvp
    restart: always
  redis:
    image: redis:4.0.14
    container_name: rediss
    ports:
      - "6379:6379"
    volumes:
      - redisData:/data
    command: redis-server
    networks:
      - wvp
    restart: always
  zlm:
    #image: zlmediakit:latest
    image: hub.brain.zcn.com/wvp/zlmediakit:1.0.0
    container_name: zlms
    ports:
      - "1935:1935"
      - "6080:6080"
      - "8443:443"
      - "8554:554"
      - "8554:554/udp"
      - "10000:10000"
      - "10000:10000/udp"
      - "9000:9000/udp"
      - "30000-30500:30000-30500"
      - "30000-30500:30000-30500/udp"
    volumes:
      - zlmConfig:/root/ZLMediaKit/release/linux/Debug/
    networks:
      - wvp
    restart: always
  wvp:
    image: hub.brain.zcn.com/wvp/wvp-pro-release:v1.0
    container_name: wvps
    ports:
      - "18081:18081"
      - "18082:18082"
      - "5060:5060"
      - "5060:5060/udp"
    environment:
      - JAVA_OPTS:'-Dwvp.ip=10.110.131.204'
    networks:
      - wvp
    depends_on:
      - mysql
      - redis
      - zlm
    restart: always
networks:
  wvp:
volumes:
  mysqlData:
    external:
      true
  redisData:
    external:
      true
  zlmConfig:
    external:
      true

lz docker-conpose

version: "3.0"
services:
  mysql:
    image: mysql:8.0.29
    container_name: mysqls
    ports:
      - "33060:3306"
    volumes:
      - mysqlData:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: root
    networks:
      - wvp
    restart: always
  redis:
    image: redis:4.0.14
    container_name: rediss
    ports:
      - "6379:6379"
    volumes:
      - redisData:/data
    command: redis-server
    networks:
      - wvp
    restart: always
  zlm:
    image: zlmediakit:latest
    container_name: zlms
    ports:
      - "1935:1935"
      - "6080:6080"
      - "443:443"
      - "554:554"
      - "554:554/udp"
      - "10000:10000"
      - "10000:10000/udp"
      - "9000:9000/udp"
      - "30000-30500:30000-30500"
      - "30000-30500:30000-30500/udp"
    volumes:
      - /data/zlm/data/Debug:/root/ZLMediaKit/release/linux/Debug
    networks:
      - wvp
    restart: always
  wvp:
    image: wvp-pro:2.3.25
    container_name: wvps
    ports:
      - "18081:18081"
      - "18082:18082"
      - "5060:5060"
      - "5060:5060/udp"
    environment:
      - JAVA_OPTS:'-Dwvp.ip=172.16.122.125'
    networks:
      - wvp
    depends_on:
      - mysql
      - redis
      - zlm
    restart: always
networks:
  wvp:
volumes:
  mysqlData:
    external:
      true
  redisData:
    external:
      true
  zlmConfig:
    external:
      true

3.启动docker-compose

1. $ mkdir sip
2. $ mv /root/docker-compose.yml sip
3. # !!!---修改wvp.environment ip为本机ip--- !!!
4. $ docker-compose up -d

4.启动容器监控portainer

$ docker run -d -p 9001:9000 -v /root/portainer:/data -v /var/run/docker.sock:/var/run/docker.sock --name dev-portainer portainer/portainer

#参数说明:
-v /var/run/docker.sock:/var/run/docker.sock # 把宿主机的Docker守护进程(docker daemon)默认监听的Unix域套接字挂载到容器中
-v /root/portainer:/data # 把宿主机目录 /root/portainer 挂载到容器 /data 目录;

5.外网开放端口

服务端口类型描述必须
wvp18081tcpwvp的http端口
wvp5060tcp&udp28181sip信令端口
wvp18082tcp录像管理服务端口
zlm6080tcp流媒体服务的http端口
zlm1935tcp流媒体服务的rtmp端口
zlm554tcp&udp流媒体服务的rtsp端口
zlm30000-30500 多端口开放tcp&udp流媒体服务接收视频推流端口
zlm443tcp
wvp9001tcp查看Docker容器管理端口
zlm8000rtc端口
zlm9000srt端口
zlm10000 单端口开放tcp&udpzlm服务器单端口收流端口

PS: wvp之所以不需要zlm配置这么多, 是因为wvp会在连接上zlm后,自动配置zlm. 尽量简化大家的配置. wiki更新可能不是很及时。大家可以参考all-application.yml, 里面有所有的配置项以及注释。

十,注意事项

1.外网端口必须开放多端口模式

30000~30500

2.ip配置要求

sip.ip            #必须为外网IP地址,摄像头通过外网访问wvp 
media.stream-ip   #必须为外网IP地址,视频流通过此ip访问流媒体服务zlm

3.测试udp端口

telnet -nupl 无法测试udp端口

测试udp端口命令【需要关闭该端口的tcp】

$ nc -vuz 10.110.131.64 8080

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/182840.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

手写线程池

为什么要使用线程池? 降低资源的消耗&#xff0c;降低线程创建和销毁的资源消耗&#xff1b;降低响应速度&#xff1a;线程的创建时间为T1&#xff0c;执行时间T2&#xff0c;销毁时间T3&#xff0c;免去T1和T3的时间&#xff1b;提高线程的可管理性 线程池的核心思想&#x…

【从零带你玩转Linux】权限及相关指令

前言 &#x1f3e0;个人主页&#xff1a;泡泡牛奶 &#x1f335;系列专栏&#xff1a;从零带你玩转Linux 本期将会让大家了解什么是权限&#xff0c;权限该如何理解&#xff0c;以及Linux中一些有关权限设置的指令操作&#xff0c;让你在Linux使用中更加得心应手(&#xff5e;&…

Git详细使用文档

Git 1.项目存在哪些问题 1.项目安全性太低2.项目很难协同开发3.项目无端报错4.项目版本混乱 2.Git概念 Git是一个分布式的版本控制及协同开发工具 3.版本控制工具分类 3.1.集中式版本控制工具 cvs svn ​ 集中式版本控制系统&#xff0c;版本库是集中存放在中央服务器的&am…

LeetCode 刷题系列 -- 143. 重排链表

给定一个单链表 L 的头节点 head &#xff0c;单链表 L 表示为&#xff1a;L0 → L1 → … → Ln - 1 → Ln请将其重新排列后变为&#xff1a;L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → …不能只是单纯的改变节点内部的值&#xff0c;而是需要实际的进行节点交换。示例 1&a…

深度卷积神经网络、池化层、为什么使用卷积、残差网络

目录1.深度卷积神经网络(a deep convolutional neural network)输入图像的维度是&#xff0c;如果&#xff0c;计算输出图像维度公式&#xff1a;。s表示步幅&#xff0c;p表示填充的层数。filters的通道数是和输入图像的通道数保持一致的。分析上图案例&#xff1a;第一层卷积…

leetcode刷题记录总结-5.双指针专题

文章目录一、过滤保序27.移除元素题解题解1&#xff1a;暴力解法题解2&#xff1a;双指针法[26. 删除有序数组中的重复项](https://leetcode.cn/problems/remove-duplicates-from-sorted-array/)题解[283. 移动零 ](https://leetcode.cn/problems/move-zeroes/description/)题解…

借助ChatGPT学习ROS2机器人编程

很好用&#xff0c;很方便。简单发布和订阅代码直接能跑的。如下&#xff1a;学习效率指数提升&#xff0c;果然数字生产力之神&#xff01;空洞的问题和回复&#xff1a;如何在一个月时间内掌握ROS2机器人操作系统的全部核心内容&#xff1f;要在一个月时间内掌握ROS2机器人操…

源码启动MeterSphereV2.6版本注意事项(三)

前言 之前写过一篇MeterSphereV2.3版本Mac本地启动详细教程&#xff08;含常见错误&#xff09;本地启动V2.3版本的。时隔3个月&#xff0c;MeterSphere已经到了V2.6 版本了&#xff0c;很多小伙伴私信我让我写一篇V2.6 版本的启动&#xff0c;刚好趁过年有时间&#xff0c;给…

Spring和SpringMvc详细讲解

&#x1f3c6;今日学习目标&#xff1a; &#x1f340;Spring和SpringMvc详细讲解 ✅创作者&#xff1a;林在闪闪发光 ⏰预计时间&#xff1a;30分钟 &#x1f389;个人主页&#xff1a;林在闪闪发光的个人主页 &#x1f341;林在闪闪发光的个人社区&#xff0c;欢迎你的加入: …

金仓数据库单表与多表查询

单表与多表查询 单引号与双引号 针对有空格、特殊字符、数字开头的字段别名必须加双引号 针对标量字符串表达式必须用加单引号 连接运算 字符串的拼接运算 字符串拼接经常用于生成SQL脚本 删除exam模式下所有的表&#xff0c;可以通过拼接生成如下批量的SQL select drop t…

scipy learn sharpen filter

文章目录1. 问题2. 方案2.1 学习一个 5 * 5的滤波核2.2 学习分通道的滤波核 以及 分离卷积3. 分析根据图像对学习滤波核之前研究过根据图像对生成3Dlut, 以及生成颜色变换系数 这里我们利用图像对学习 滤波 1. 问题 遇到的问题是这样的&#xff0c;已知一个图像和经过邻域滤…

爱快软路由对笔记本实现网络唤醒

本人有一台爱快软路由作为动态域名和端口映射&#xff0c;实现通过阿里域名远程访问内网设备。一台X201笔记本连接在软路由上。由于X201电池已经卸下无法实现来电开机&#xff0c;只能通过爱快e云APP手动实现网络唤醒&#xff0c;感觉非常麻烦。爱快云web端也不能实现开机唤醒X…

学长教你学C-day11-C语言结构体、枚举、联合体

“前面我们学习了数组&#xff0c;从数据类型来看&#xff0c;数组就是具有相同数据类型的变量集合&#xff1b;从内存空间来看&#xff0c;数组就是一串由相同大小的数据空间组成的较大的内存空间。那么结构体是什么呢&#xff1f;从内存角度讲&#xff0c;结构体也是一块地址…

PEG化芘衍生物——Pyrene-PEG-Acid,Pyrene-PEG-COOH,芘丁酸-聚乙二醇-羧基

一&#xff1a;产品描述 1、名称 英文&#xff1a;Pyrene-PEG-COOH&#xff0c;Pyrene-PEG-Acid 中文&#xff1a;芘丁酸-聚乙二醇-羧基 2、CAS编号&#xff1a;N/A 3、所属分类&#xff1a; Carboxylic acid PEG Pyrene PEG 4、分子量&#xff1a;可定制2000、1000、340…

2022个人年度总结:别让内心的烦躁和焦虑,占据本就不多的热情。

在从毕业一直到现在&#xff0c;我都会写一篇关于自己的从技术、商业、人情世故以及未来展望的博文&#xff0c;以至于归纳每个时期的自己&#xff0c; 走在互联网开发的边缘&#xff0c;不得不抽出时间鞭策自己学习新知识&#xff0c;未知的知识是 充满好奇的&#xff0c; 就好…

Makefile学习⑧:Makefile中通用部分做公共头文件

Makefile学习⑧&#xff1a;Makefile中通用部分做公共头文件 创建2个文件夹Demo1和Demo2,2个文件夹中的文件完全一样&#xff0c;但是命名不一样。 博主创建的如下&#xff0c;内容沿用前几章的函数文件。 这两个Makefile中的内容除了目标文件名和依赖文件名不一致&#xff0…

轻松实现一个Python+Selenium的自动化测试框架

首先你得知道什么是Selenium&#xff1f; Selenium是一个基于浏览器的自动化测试工具&#xff0c;它提供了一种跨平台、跨浏览器的端到端的web自动化解决方案。Selenium主要包括三部分&#xff1a;Selenium IDE、Selenium WebDriver 和Selenium Grid。 Selenium IDE&#xff…

知识抽取-实体及关系抽取

信息抽取的三个最重要&#xff0c;最受关注的子任务&#xff1a; 实体抽取 命名实体识别&#xff0c;包括实体检测&#xff08;find)和分类&#xff08;classify) 关系抽取。 通常我们所述的三元组抽取&#xff0c; 一个谓词&#xff08;predicate)带2个形参&#xff08;argum…

MySQL学习记录(9)存储引擎

文章目录6、InnoDB存储引擎6.1、逻辑存储结构6.2、架构6.2.1、概述6.2.2、内存结构6.2.3、磁盘结构6.2.4、后台线程6.3、事务原理6.3.1、事务基础6.3.2、redo log日志6.3.3、undo log日志6.4、MVCC6.4.1、基本概念6.4.2、记录中隐藏字段6.4.3、undo log日志6.4.4、readview6.4.…

算法基础(二):数组知识点及题型讲解

算法基础&#xff08;二&#xff09;&#xff1a;数组知识点及题型讲解1 数组定义2 Python数组常用操作2.1 创建数组2.2 添加元素2.3 访问元素2.4 更新元素2.5 删除元素2.6 获取数组长度2.7 遍历数组2.8 查找某个元素2.9 数组排序3 力扣题目训练一些算法基础知识点和leetcode题…