Reboot Task

最简单/etc/rc.lo­cal

默认是不开启的,文件/etc/rc.lo­cal默认也不存在

开启/etc/rc.lo­cal功能

  • ubuntu18.04不再使用initd管理系统,改用systemd
  • systemd有rc-local的配置文件,只需链接到/etc/systemd/system目录下启动即可
    • ln -fs /lib/systemd/system/rc-local.service /etc/systemd/system/rc-local.service

使用/etc/rc.lo­cal功能

1
2
3
4
touch /etc/rc.local
chmod 755 /etc/rc.local
vim /etc/rc.local
eg. #!/bin/bash echo "test rc " > /var/test.log

crontab @reboot

1
2
crontab -e
@reboot /home/user/test.sh

initd 启动管理系统

  • init.d目录包含许多系统各种服务的启动和停止脚本。它控制着所有从acpid到x11-common的各种事务。
  • 注意:ubuntu18.04不再使用initd管理系统,改用systemd

编写脚本

  • /etc/init.d目录下建立文件test
    • 按照README编写脚本
    • 赋予执行权限sudo chmod +x /etc/init.d/test

设置脚本启动

方法一:使用update-rc.d 命令将脚本放到启动脚本中去(debian中可以使用更新的insserv):

1
2
$ cd /etc/init.d
$ sudo update-rc.d test defaults 95

注:其中数字95是脚本启动的顺序号,按照自己的需要相应修改即可。在你有多个启动脚本,而它们之间又有先后启动的依赖关系时你就知道这个数字的具体作用了。更多说明建议看man update-rc.d。

方法二:手动在rc*.d中建立软连接

1
$ ls -s test ../rc5.d/S95test

rc*.d,*代表启动级别,在不同启动级别启动,
K开头的脚本文件代表运行级别加载时需要关闭的,
S开头的代表相应级别启动时需要执行,
数字代表顺序

卸载启动脚本的方法:

1
2
$ cd /etc/init.d
$ sudo update-rc.d -f test remove

手动调用脚本

1
2
3
/etc/init.d/test start
/etc/init.d/test stop
/etc/init.d/test restart

systemd 服务管理系统

使用sudo systemctl enable xxx

1
2
3
4
5
6
7
8
9
systemctl is-enabled servicename.service #查询服务是否开机启动
systemctl enable *.service #开机运行服务
systemctl disable *.service #取消开机运行
systemctl start *.service #启动服务
systemctl stop *.service #停止服务
systemctl restart *.service #重启服务
systemctl reload *.service #重新加载服务配置文件
systemctl status *.service #查询服务运行状态
systemctl --failed #显示启动失败的服务

systemctl 开机启动原理

  • Systemd 默认从目录/etc/systemd/system/读取配置文件。
  • 但是,里面存放的大部分文件都是符号链接,指向目录
    • /usr/lib/systemd/system/,真正的配置文件存放在那个目录。

systemctl enable命令用于在上面两个目录之间,建立符号链接关系。

1
2
3
4
> $ sudo systemctl enable [email protected]
# 等同于
$ sudo ln -s '/usr/lib/systemd/system/[email protected]' '/etc/systemd/system/multi-user.target.wants/[email protected]'
>
  • 如果配置文件里面设置了开机启动,systemctl enable命令相当于激活开机启动。
  • 与之对应的,systemctl disable命令用于在两个目录之间,撤销符号链接关系,相当于撤销开机启动。
    1
    2
    > $ sudo systemctl disable [email protected]
    >
  • 配置文件的后缀名,就是该 Unit 的种类,比如sshd.socket
    • 如果省略,Systemd 默认后缀名为.service,所以sshd会被理解成sshd.service

把程序设置systemctl服务,并开机启动

进入目录/usr/lib/systemd/system,修改webhook.service

1
2
3
4
5
6
7
8
9
[Unit]
Description=Webhook receiver for GitHub

[Service]
Type=simple
ExecStart=/usr/local/bin/webhook

[Install]
WantedBy=multi-user.target

这里有几个模块:

  • [Unit] 区块:启动顺序与依赖关系。
  • [Service] 区块:启动行为,如何启动,启动类型。
  • [Install] 区块,定义如何安装这个配置文件,即怎样做到开机启动。
1
2
systemctl start nexus.service  #启动服务
systemctl enable nexus.service #设置开机启动

Loaded: loaded (/etc/systemd/system/webhook.service; enabled;这个enabled就是开机启动的意思

需要进一步的研究学习

暂无

遇到的问题

暂无

开题缘由、总结、反思、吐槽~~

参考文献

https://neucrack.com/p/91

OpenWRT on router

OpenWRT Installation on router

原理

原理在路由器的两个flash(firmware和firmware1)的两个系统里,写入一个支持图形化OpenWRT的新系统

查看路由器型号是否支持

查看系统型号[^1]:路由器默认是魔改的openwrt的系统:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
root@XiaoQiang:~# cat /etc/os-release
NAME="OpenWrt"
VERSION="18.06-SNAPSHOT"
ID="openwrt"
ID_LIKE="lede openwrt"
PRETTY_NAME="OpenWrt 18.06-SNAPSHOT"
VERSION_ID="18.06-snapshot"
HOME_URL="http://openwrt.org/"
BUG_URL="http://bugs.openwrt.org/"
SUPPORT_URL="http://forum.lede-project.org/"
BUILD_ID="unknown"
LEDE_BOARD="mediatek/mt7622"
LEDE_ARCH="aarch64_cortex-a53_neon-vfpv4"
LEDE_TAINTS="no-all glibc busybox"
LEDE_DEVICE_MANUFACTURER="OpenWrt"
LEDE_DEVICE_MANUFACTURER_URL="http://openwrt.org/"
LEDE_DEVICE_PRODUCT="Generic"
LEDE_DEVICE_REVISION="v0"
LEDE_RELEASE="OpenWrt 18.06-SNAPSHOT unknown"

刷入OpenWRT后:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
root@ax6s:~# cat /etc/os-release
NAME="OpenWrt"
VERSION="22.03.2"
ID="openwrt"
ID_LIKE="lede openwrt"
PRETTY_NAME="OpenWrt 22.03.2"
VERSION_ID="22.03.2"
HOME_URL="https://openwrt.org/"
BUG_URL="https://bugs.openwrt.org/"
SUPPORT_URL="https://forum.openwrt.org/"
BUILD_ID="r19803-9a599fee93"
OPENWRT_BOARD="mediatek/mt7622"
OPENWRT_ARCH="aarch64_cortex-a53"
OPENWRT_TAINTS=""
OPENWRT_DEVICE_MANUFACTURER="OpenWrt"
OPENWRT_DEVICE_MANUFACTURER_URL="https://openwrt.org/"
OPENWRT_DEVICE_PRODUCT="Generic"
OPENWRT_DEVICE_REVISION="v0"
OPENWRT_RELEASE="OpenWrt 22.03.2 r19803-9a599fee93"

路由器开启dropbear

dropbear 是一种轻量级sshd服务

1
2
3
nvram set ssh_en=1  # 不是1也退出1
/etc/init.d/dropbear start # 脚本start段里增加了判断,稳定版不让启动直接退出
netstat -n # 查看22端口

修改/etc/dropbear/authorized_keys 来添加ssh公钥

Redmi-Ax6s实操

参考教程,和具体的视频

Step2

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
#!/usr/bin/env python3
import sys
import hashlib

if sys.version_info < (3,7):
print("python version is not supported", file=sys.stderr)
sys.exit(1)

# credit goes to zhoujiazhao:
# https://blog.csdn.net/zhoujiazhao/article/details/102578244

salt = {'r1d': 'A2E371B0-B34B-48A5-8C40-A7133F3B5D88',
'others': 'd44fb0960aa0-a5e6-4a30-250f-6d2df50a'}


def get_salt(sn):
if "/" not in sn:
return salt["r1d"]

return "-".join(reversed(salt["others"].split("-")))


def calc_passwd(sn):
passwd = sn + get_salt(sn)
m = hashlib.md5(passwd.encode())
return m.hexdigest()[:8]


if __name__ == "__main__":
if len(sys.argv) != 2:
print(f"Usage: {sys.argv[0]} <S/N>")
sys.exit(1)

serial = sys.argv[1]
print(calc_passwd(serial))

Step3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
XiaoQiang login: root
Password:


BusyBox v1.25.1 (2021-10-25 11:02:56 UTC) built-in shell (ash)

-----------------------------------------------------
Welcome to XiaoQiang!
-----------------------------------------------------
$$$$$$\ $$$$$$$\ $$$$$$$$\ $$\ $$\ $$$$$$\ $$\ $$\
$$ __$$\ $$ __$$\ $$ _____| $$ | $$ | $$ __$$\ $$ | $$ |
$$ / $$ |$$ | $$ |$$ | $$ | $$ | $$ / $$ |$$ |$$ /
$$$$$$$$ |$$$$$$$ |$$$$$\ $$ | $$ | $$ | $$ |$$$$$ /
$$ __$$ |$$ __$$< $$ __| $$ | $$ | $$ | $$ |$$ $$<
$$ | $$ |$$ | $$ |$$ | $$ | $$ | $$ | $$ |$$ |\$$\
$$ | $$ |$$ | $$ |$$$$$$$$\ $$$$$$$$$ | $$$$$$ |$$ | \$$\
\__| \__|\__| \__|\________| \_________/ \______/ \__| \__|


root@XiaoQiang:~# ls

Step4

  1. 通过cat /proc/mtd,知道对应关系

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    root@XiaoQiang:/tmp# cat /proc/mtd
    dev: size erasesize name
    mtd0: 07f80000 00020000 "ALL"
    mtd1: 00080000 00020000 "Bootloader"
    mtd2: 00040000 00020000 "Config"
    mtd3: 00040000 00020000 "Bdata"
    mtd4: 00040000 00020000 "Factory"
    mtd5: 00040000 00020000 "crash"
    mtd6: 00040000 00020000 "crash_syslog"
    mtd7: 00040000 00020000 "cfg_bak"
    mtd8: 00400000 00020000 "kernel0"
    mtd9: 00400000 00020000 "kernel1"
    mtd10: 01a00000 00020000 "rootfs0"
    mtd11: 01a00000 00020000 "rootfs1"
    mtd12: 02600000 00020000 "overlay"
    mtd13: 01b80000 00020000 "obr"
    mtd14: 00c1c000 0001f000 "ubi_rootfs"
    mtd15: 021e8000 0001f000 "data"
  2. 备份,其中Factory中存储了EEPROM的数据

    1
    2
    3
    4
    5
    6
    cat /dev/mtd4 > Factory.dump
    cat /dev/mtd3 > Bdata.dump

    #on windows
    scp [email protected]:/tmp/factory.bin .
    scp [email protected]:/tmp/factory.bin .

Step5

  1. 路由器ssh终端,配置环境变量

     
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    # nvram写入flash
    # Enable uart and boot_wait, useful for testing or recovery if you have an uart adapter!
    nvram set ssh_en=1
    # 设置串口打开,以便ssh失败时,硬件debug
    nvram set uart_en=1
    nvram set boot_wait=on

    # Set kernel1 as the booting kernel
    nvram set flag_boot_success=1
    nvram set flag_try_sys1_failed=0
    nvram set flag_try_sys2_failed=0

    # Commit our nvram changes
    nvram commit
  2. 电脑本地准备传输可执行文件(开启了ssh服务,直接scp传上去即可)

    1. Rename the file openwrt-mediatek-mt7622-xiaomi_redmi-router-ax6s-squashfs-factory.bin you previously downloaded to your computer to factory.bin
    2. in the same directory where the file factory.bin is located, run the following command python -m http.server
  3. 路由器ssh终端,配置环境变量接受并运行

    1
    2
    3
    cd /tmp
    wget http://<IP address of your computer>:8000/factory.bin
    mtd -r write factory.bin firmware
  4. 完成后重启,默认ip变成192.168.1.1

  5. 失败加上nvram set "boot_fw1=run boot_rd_img;bootm" 重来

WireGuard Server in OpenWRT

OpenWRT换软件安装源

修改/etc/opkg/distfeeds.conf的配置,参考

下面为x86软路由的源(由于是snapshot的安装不了,内核不匹配),如果是arm的需要看对应架构代号。

1
2
3
4
5
6
src/gz openwrt_core https://mirrors.ustc.edu.cn/openwrt/releases/22.03.3/targets/x86/64/packages
src/gz openwrt_base https://mirrors.ustc.edu.cn/openwrt/releases/22.03.3/packages/x86_64/base
src/gz openwrt_luci https://mirrors.ustc.edu.cn/openwrt/releases/22.03.3/packages/x86_64/luci
src/gz openwrt_packages https://mirrors.ustc.edu.cn/openwrt/releases/22.03.3/packages/x86_64/packages
src/gz openwrt_routing https://mirrors.ustc.edu.cn/openwrt/releases/22.03.3/packages/x86_64/routing
src/gz openwrt_telephony https://mirrors.ustc.edu.cn/openwrt/releases/22.03.3/packages/x86_64/telephony

比如ax6s

1
2
3
4
5
6
7
[root@ax6s ~]$ cat /etc/opkg/distfeeds.conf
src/gz openwrt_core https://downloads.openwrt.org/releases/22.03.2/targets/mediatek/mt7622/packages
src/gz openwrt_base https://downloads.openwrt.org/releases/22.03.2/packages/aarch64_cortex-a53/base
src/gz openwrt_luci https://downloads.openwrt.org/releases/22.03.2/packages/aarch64_cortex-a53/luci
src/gz openwrt_packages https://downloads.openwrt.org/releases/22.03.2/packages/aarch64_cortex-a53/packages
src/gz openwrt_routing https://downloads.openwrt.org/releases/22.03.2/packages/aarch64_cortex-a53/routing
src/gz openwrt_telephony https://downloads.openwrt.org/releases/22.03.2/packages/aarch64_cortex-a53/telephony

可以通过cat /etc/os-release查看, 上面的如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
root@OpenWrt:~# cat /etc/os-release
NAME="OpenWrt"
VERSION="SNAPSHOT" # snapshot是开发版的意思
PRETTY_NAME="OpenWrt SNAPSHOT"
VERSION_ID="snapshot"
BUILD_ID="r5636-25f88e06f"
OPENWRT_BOARD="x86/64"
OPENWRT_ARCH="x86_64"

[root@ax6s ~]$ cat /etc/os-release
NAME="OpenWrt"
VERSION="22.03.2"
PRETTY_NAME="OpenWrt 22.03.2"
VERSION_ID="22.03.2"
BUILD_ID="r19803-9a599fee93"
OPENWRT_BOARD="mediatek/mt7622"
OPENWRT_ARCH="aarch64_cortex-a53"

WireGuard安装服务端程序

  1. eSir精品小包固件下载地址(感谢esir的辛勤付出)

    1. 内置了wireguard(使用对等节点的公私钥加密)
  2. OpenWrt安装WireGuard命令(eSir精品小包已集成WireGuard,无需安装)

    1
    2
    3
    4
    5
    6
    opkg update
    opkg install luci-proto-wireguard luci-app-wireguard wireguard kmod-wireguard wireguard-tools
    reboot

    # x86
    opkg install wireguard luci-app-wireguard luci-i18n-wireguard-zh-cn wireguard-tools

WireGuard服务端设置

具体步骤

  1. 配置WG服务器端公私钥
  2. OpenWrt的luci界面配置服务器节点
  3. OpenWrt-网络-防火墙设置
    1. 如果OpenWrt做主路由,还需要在防火墙->通信规则中开放端口
    2. 假如是旁路由,需要设置端口转发
  4. 为每个客户端节点创建密钥
  5. OpenWrt->网络->接口,修改原本的WG0设置。修改Peers
    1. 左下角更多选项选择预共享密钥,添加
    2. 由于不能同时用,所以每个机器要单独配置,不能公用

WireGuard客户端设置

客户端模板文件test.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[Interface]
Address = 192.168.100.2 约定的IP
PrivateKey = cprivatekey文件内容
DNS = 路由器IP


[Peer]
PublicKey = spublickey文件内容

AllowedIPs = 0.0.0.0/0
//上面代表所有流量走WG。如果启用下面这行代码,表示只有192.168.2.0/24, 192.168.100.0/24这两个子网的IP走WireGuard
//逗号前是家庭局域网的IP段,后面是VPN的IP段
//AllowedIPs = 192.168.2.0/24, 192.168.100.0/24

PresharedKey=sharedkey内容
Endpoint = 公网IP(动态域名):端口号
PersistentKeepalive = 25

WireGuard配置匹配一览图

"[Interface] Address" is the address that gets assigned to the (virtual) network interface (e.g. wg0).
简单来说客户端和服务器端约定的相同的虚拟地址来通信。

注意防火墙放行端口

官方客户端软件下载

WireGuard常见问题

注意:如果连接不上

  1. 首先保证路由器有网,不是路由器下的电脑有网
    1. 上次师兄的电脑开了OpenVPN上网,导致路由器ipv6能ping通,但是不能上网
  2. 注意防火墙,一个是wan口允许某几个端口进来(wg连接请求)。另一个是wan能到wg,wg也能到wan,才能实现上网
    1. 至于和lan的关系,如果需要通过wg访问lan口下的设备(nas,电脑)再打开即可。

Clash in OpenWrt

  • 安装版本来自github
  • 但是由于DDNS会出问题,所以关闭了。(可以考虑2次wireguard蹭网和clash for linux)
  • BT,PT有时也会被代理,需要注意。

安装编译好的 IPK 文件(openwrt 的软件包)

安装依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
#iptables
opkg update
opkg install coreutils-nohup bash iptables dnsmasq-full curl ca-certificates ipset ip-full iptables-mod-tproxy iptables-mod-extra libcap libcap-bin ruby ruby-yaml kmod-tun kmod-inet-diag unzip luci-compat luci luci-base

#nftables
opkg update
opkg install kmod-nft-tproxy

wget https://github.com/vernesong/OpenClash/releases/download/v0.45.59-beta/luci-app-openclash_0.45.59-beta_all.ipk
root@ax6s:/tmp# opkg install luci.ipk
Installing luci-app-openclash (0.45.59-beta) to root...
Configuring luci-app-openclash.
cfg117882

重启后出现

注意不会代理ping,所以ping不通的话,可以用curl来测试代理是否生效。https失败可以尝试http

安装问题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Collected errors:
* check_data_file_clashes: Package dnsmasq-full wants to install file /etc/hotplug.d/ntp/25-dnsmasqsec
But that file is already provided by package * dnsmasq
* check_data_file_clashes: Package dnsmasq-full wants to install file /etc/init.d/dnsmasq
But that file is already provided by package * dnsmasq
* check_data_file_clashes: Package dnsmasq-full wants to install file /usr/lib/dnsmasq/dhcp-script.sh
But that file is already provided by package * dnsmasq
* check_data_file_clashes: Package dnsmasq-full wants to install file /usr/sbin/dnsmasq
But that file is already provided by package * dnsmasq
* check_data_file_clashes: Package dnsmasq-full wants to install file /usr/share/acl.d/dnsmasq_acl.json
But that file is already provided by package * dnsmasq
* check_data_file_clashes: Package dnsmasq-full wants to install file /usr/share/dnsmasq/dhcpbogushostname.conf
But that file is already provided by package * dnsmasq
* check_data_file_clashes: Package dnsmasq-full wants to install file /usr/share/dnsmasq/rfc6761.conf
But that file is already provided by package * dnsmasq
* opkg_install_cmd: Cannot install package luci-app-openclash.

解决办法如下

1
2
opkg update
opkg remove dnsmasq && opkg install dnsmasq-full

DDNS in OpenWRT

DDNS简介

Dynamic DNS: 根據網際網路的域名訂立規則,域名必須跟從固定的IP位址。但動態DNS系統為動態網域提供一個固定的名稱伺服器(Name server),透過即時更新,使外界使用者能夠連上動態使用者的網址。

cloudflare动态域名 或者阿里云动态域名的DDNS都是很好的选择。

定时脚本实现DDNS

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@ax6s ~]$ cat ddns.sh
#!/bin/bash

Network=wan@eth0

Date=`echo $'\n\n' >> /tmp/ddns_ipv4`
Date=`echo "$(date)" >> /tmp/ddns_ipv4`
IPv4=`ip a|grep -A 2 ${Network}|sed -n '3p'|awk '{print $2}' |sed -e 's/\/[0-9]*//'`
echo $IPv4 >> /tmp/ddns_ipv4
IPv6=`ip a|grep -A 4 ${Network}|sed -n '5p'|awk '{print $2}' |sed -e 's/\/[0-9]*//'`
echo $IPv6 >> /tmp/ddns_ipv4

curl -v http://v6.sync.afraid.org/u/4TY5…………tKF/?address=${IPv6} 2>&1 >> /tmp/ddns_ipv4
curl -v http://sync.afraid.org/u/M8uh9Zf…………ryjxs/?address=${IPv4} 2>&1 >> /tmp/ddns_ipv4

修改crontab -e

1
2
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
4,9,14,19,24,29,34,39,44,49,54,59 * * * * sleep 11 ; /root/ddns.sh

OpenWRT 为局域网设备设置IPv6 DDNS

脚本围绕,打印邻居路由表命令

1
2
3
4
5
6
[root@ax6s ~]$ ip -6 neigh | grep 2c:f0:5d
2001:da8:d800:611:1818:61b6:6422:56a1 dev br-lan lladdr 2c:f0:5d:ac:1d:2c DELAY
2001:da8:d800:611:5464:f7ab:9560:a646 dev br-lan lladdr 2c:f0:5d:ac:1d:2c STALE
2001:da8:d800:611:4d13:ead8:9aaf:bfc4 dev br-lan lladdr 2c:f0:5d:ac:1d:2c REACHABLE
2001:da8:d800:611:a063:863f:caa3:4a73 dev br-lan lladdr 2c:f0:5d:ac:1d:2c STALE
2001:da8:d800:611:8c75:4f49:f9d0:42b6 dev br-lan lladdr 2c:f0:5d:ac:1d:2c STALE

新建 /usr/lib/ddns/dynamic_dns_iphelper.sh

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
#!/bin/sh

get_ip(){
MAC=$1
if [ "$MAC" = "" ]
then
exit 0
fi
IP=$(ip -6 neigh | grep -i $MAC | grep -v "fe80:" | grep -E "REACHABLE|STALE" | cut -d" " -f1 | grep -m 1 -E -o "([0-9a-fA-F]{1,4}(:?)){8}")
if [ "$IP" = "" ]
then
IP=$(mac_to_ipv6_ll $MAC $(get_ip_prefix))
fi
echo $IP
}

mac_to_ipv6_ll() {
PREFIX="fe80::"
if [ "$#" = 2 ]; then
PREFIX=$2
fi
IFS=':'; set $1; unset IFS
echo "$PREFIX$(printf %02x $((0x$1 ^ 2)))$2:${3}ff:fe$4:$5$6"
}

get_ip_prefix() {
IP_PREFIX=$(ip -6 addr | awk '{print $2}' | grep '::1' | grep -m 1 -E -o "([0-9a-fA-F]{1,4}(:?)){4}")
echo $IP_PREFIX
}

if [ "$1" != "" ]; then
echo `get_ip $1`
fi

新建 /usr/lib/ddns/getip_demo.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/bin/sh

. /usr/lib/ddns/dynamic_dns_iphelper.sh
# 遵循 EUI-64 的设备使用这个方式 可以获取到静态后缀的IPv6地址
# 00:00:00:00:00:00修改为目标设备的MAC地址
echo $(mac_to_ipv6_ll "00:00:00:00:00:00" $(get_ip_prefix))

# 或者
#!/bin/sh

. /usr/lib/ddns/dynamic_dns_iphelper.sh
# 00:00:00:00:00:00修改为目标设备的MAC地址
# 不遵循 EUI-64 的设备 可以获取到动态IPv6地址
echo `get_ip "00:00:00:00:00:00"`

脚本chmod +x就行

School Network

  • 根据学校的网络通各个端口的说明,0号端口没有经过NAT,登录之后获得公网ipv4。但是IPv4封了许多端口(至少ssh的22端口是不行的)
  • IPv6是直接可以ssh访问的。

参考文献

https://www.youtube.com/watch?v=F8z74oE71Gg&t=19s

https://xiumu.org/technology/openwrt-set-for-local-area-network-lan-equipment-ipv6-ddns.shtml

OpenWRTNetworkManage

2
觉得有意义写,先占个位子

需要进一步的研究学习

暂无

遇到的问题

暂无

开题缘由、总结、反思、吐槽~~

参考文献

Webdav

简介

Webdav

WebDAV由互联网工程任务组的工作组在RFC 4918中定义。是基于Web的分布式编写和版本控制(WebDAV)是超文本传输协议(HTTP)的扩展,

WebDAV协议为用户在服务器上创建,更改和移动文档提供了一个框架。有利于用户间协同编辑和管理存储在万维网服务器文档。

WebDAV协议最重要的功能包括:

  • 维护作者或修改日期的属性、名字空间管理、集合和覆盖保护。

  • 维护属性包括创建、删除和查询文件信息等。

  • 名字空间管理处理在服务器名称空间内复制和移动网页的能力。

  • 集合(Collections)处理各种资源的创建、删除和列举。

  • 覆盖保护处理与锁定文件相关的方面。

  • 可以使用https来保证安全

Samba / CIFS

局域网传输,没有加密

群晖开启WebDaV

参考教程, 开启 https 5555 端口, http 5556端口

设置特殊用户keeweb来访问下载文件夹keeweb下内容。如https://10.0.233.3:5555/keeweb/1.txt

windows挂载

安装RaiDrive

测速

大文件

在1.63GB大文件的时候,SMB能稳定的跑满千兆全速

2M中文件

首先通过split来拆分文件来测试

1
split -b 2M 1.mkv split.mkv

在2M的时候,WebDav有些许优势

4K小碎片

在4K的时候,WebDav较大优势

需要进一步的研究学习

暂无

遇到的问题

暂无

开题缘由、总结、反思、吐槽~~

  1. 网上有传言 WebDav 比 SMB快 8~9倍,但是有人质疑是缓存的原因
  2. keepass同步可以通过坚果云的WebDav

参考文献

https://www.rmnof.com/article/better-ways-to-use-webdav/

IPV4 && IPV6

IPV4

展示了A、B、C类IP地址的二进制表示和它们的特征:

类别 地址范围 网络数 主机数 说明
A 0xxxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx 1-126 2^24-2 第一位为0
B 10xxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx 128-191 2^16-2 前两位为10
C 110xxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx 192-223 2^8-2 前三位为110
D 1110xxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx 224-239 不适用 用于多播
E 11110xxx.xxxxxxxx.xxxxxxxx.xxxxxxxx 240-255 不适用 保留用于实验和未来使用

在这个表格中:

  • A类地址的范围是从 0.0.0.0127.255.255.255,第一位必须是0。
  • B类地址的范围是从 128.0.0.0191.255.255.255,前两位必须是10。
  • C类地址的范围是从 192.0.0.0223.255.255.255,前三位必须是110。

D类和E类地址用于特殊用途,不用于普通的网络和主机地址分配。

拥抱ipv6

ipv6 原本是为了解决ipv4不足而提出的:

  • IPv4的地址范围是0.0.0.0~255.255.255.255,其地址总量约43亿个(2的32次方),这其中还要刨去私有网段、网络ID、广播ID、保留网段、本地环回、组播地址等特殊地址段,最终的实际可用地址约为25.68亿个,全球互联网设备数是远超这个的。所以一方面设计了私有地址来上网
  • 另一方面就是ipv6。IPv6的地址长度为128位,虽然地址长度仅仅是IPv4的4倍(IPv4是32位的),但IPv6的地址总量却达到了惊人的$2^{128}$。换一种更通俗的说法:地球上每一平方米,都可以分到10^26次方个IPv6地址,夸张一点来说,可以给每一粒尘埃都分配到一个地址。
Read more

Audio

基本的音视频编码知识

Read more

Video

视频信息软件Mediainfo

同样是1080P 25帧,码率不同,大小差异很大。

或者(有时候会失效,eg 720P)

相关概念

CRF

CRF(英文:constant ratefactor 意思:压缩质量)是动态码率,要看你拍摄的视频画面抖动切换的程度,如果比较安静就20,动的厉害就25。

crf18就接近无损,字幕组惯用20-22,crf23是默认值。 CRF的值越小,视频将会越清晰 当然视频质量就会更大。

2-pass

2-pass通过两次编码,第一次编码是先对整个文件进行扫描,记录一些统计信息,第二次编码时根据前面记录的统计信息再进行编码。这么做虽然转换时间会漫长,但压出的片子会有更好的画质,画面细节更好,而且体积会更小。

常用于非实时转码的情景。

视频压缩实践

疫情线上参会邮件投递Presentation视频,邮件大小限制100MB。PPT生成的过大

格式工厂(Format Factory)压缩

直接自定义导入导出,默认设置就行(确定分辨率不变的情况下,大小无法限制)。视频部分就只有原来五分之一(中间),而且完全看不出损失。

如果要最小大小,选择“转mp4”,然后“输出设置”选择“低质量和大小”,最后在分辨率选回原来的分辨率。

如果不熟悉H.265的参数设置,压缩后不一定比H.264小。

PS: H.264中熵编码有两种方法:

  1. 一种是对所有的待编码的符号采用统一的VLC(UVLC :Universal VLC),
  2. 另一种是采用内容自适应的二进制算术编码(CABAC:Context-Adaptive Binary Arithmetic Coding)。CABAC是可选项

CABAC动态的根据内容的码率能在效能与压缩效率上取得相当大的改善空间,但是顺序处理造成资料依存性(Data Dependency)偏高。

FFmpeg命令行

已知大小需求来计算需要压缩的码率。直接设置压缩后的平均码率就行,常见软件有:小丸工具箱,HandBrake, 剪映

首先需要知道如何计算码率


ffmpeg是一个自由软件,可以运行音频、视频多种格式的录影、转换、流功能,包含

  • libavcodec–这是一个用于多个项目中的音频、视频的解码器库,
  • libavformat–一个音频和视频格式转换库。
1
2
3
4
# 视频流码率 500k, 音频流码率 50k
ffmpeg -i huawei_report_English_video.mp4 -c:v libx264 -b:v 500k -b:a 50k out_500k.mp4
# 或者设置最大最小
ffmpeg -i huawei_report_English_video.mp4 -minrate 100K -maxrate 500K -bufsize 2000K out.mp4

结果如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ ls
-rw-r--r-- 1 shaojiemike staff 119M Jan 2 16:59 huawei_report_English_video.mp4
-rw-r--r-- 1 shaojiemike staff 50M Jan 2 17:23 out_500k.mp4
-rw-r--r-- 1 shaojiemike staff 24M Jan 2 17:14 out.mp4

$ ffmpeg -i out_500k.mp4 -hide_banner
Duration: 00:12:25.68, start: 0.000000, bitrate: 553 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 493 kb/s, 30.30 fps, 30.30 tbr, 30303 tbn, 60.61 tbc (default)
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 50 kb/s (default)

# shaojiemike @ snode6 in ~/test/ffmpeg [17:14:42] C:1
$ ffmpeg -i out.mp4 -hide_banner
Duration: 00:12:25.68, start: 0.000000, bitrate: 269 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 125 kb/s, 30.30 fps, 30.30 tbr, 30303 tbn, 60.61 tbc (default)
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 134 kb/s (default)

# shaojiemike @ snode6 in ~/test/ffmpeg [17:15:29] C:1
$ ffmpeg -i huawei_report_English_video.mp4 -hide_banner
Duration: 00:12:25.66, start: 0.000000, bitrate: 1330 kb/s
Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 1151 kb/s, 30.30 fps, 30.30 tbr, 30303 tbn, 60 tbc (default)

视频码率(视频比特率)

同样分辨率下,视频文件的码率越大,压缩比就越小,画面质量就越高。码率越高,精度就越高,处理出来的文件就越接近原始文件,图像质量越好,画质越清晰,要求播放设备的解码能力也越高。体积越大,说明压缩比小,越接近原文件。

帧率与码率的关系:帧率多,则每秒图片数目多;码率越高,每张图片质量越清晰。

码率的甜品点

VMAF - Video Multi-Method Assessment Fusion 视频多方法评估

3Mbps是1080p的甜品点。

其他标准

视频压缩编码

视频压缩原理看差评君的就懂了,讲的真好。

柴知道也行

为什么有这么多标准:

H26x的视频的编解码“贵”:

  • 视频编码由视频作者解决
  • 使用H26x标准解码价格不菲

视频编码

  我们知道,其实视频就是一帧一帧的图片。计算一下,一部25帧每秒,90分钟,分辨率为1024*768,24位真彩色的视频,没有经过压缩,大小为

1
2
3
4
1Byte(字节) = 8bit(位)
一帧大小 = 1024 * 768 * 24 = 18874368(bit) = 2359296(Byte)
总帧数 = 90 * 60 * 25 = 135000
总大小 = 一帧大小 * 总帧数 = 2359296 * 135000 = 318504960000(Byte)= 303750(MB)≈ 296(GB)

  从上面的计算可以看出,我们储存一部90分钟没压缩的电影需要296GB的,2部电影便可占满我们电脑整个硬盘。所以我们需要对视频进行压缩,这种视频压缩技术就是我们所说的编码。
  视频编码方式:H.26X(H.261、H.262、…、H.264(目前最常用)、H.265)
  音频编码方式:MP3、AAC等
  通过视频压缩算法,减少了视频文件的大小。压缩比越大,解压缩还原后播放的视频越失真,这是因为压缩的同时不可避免的丢失了视频中原来图像的数据信息。

一般ITU(国际电信联盟)和ISO(国际标准化组织)来制定

  1. ISO主导的MPEG系列: MPEG-1 用于 VCD, MPEG-2用于DVD
  2. h.26x由ITU主导,比如 H.261到H.263
  3. 两者联合制定了 H.264-H.265
    1. 各自别称 MPEG-4/AVC(Advanced Video Coding)和 MPEG-4/HEVC(High Efficiency Video Coding)

B站新支持的AOM联盟的AV1标准,免费而且没有潜在的版权问题。

画质不变时,编码标准越先进,码率越低.

相对于优酷等最高大约4000的码率,虽然B站码率低,但是以普通的动画素材为主的视频而言,因为动画以简单的单色大色块居多,一般来说1500左右的码率就足够了。

目前 AVC 依然是使用最广泛的编码标准,无论新老设备都可以播放 AVC 视频,因此保留 AVC 编码可以保证广泛的兼容性。

但是 AVC 在编码超高清视频时,输出码率较高,无法保证良好的观看体验;同时很多 AVC 解码器也不支持 HDR 和 8K 视频的解码。而 HEVC 和 AV1 对于超高清视频的压缩能力明显提升,对于 HDR 和 8K 视频的支持显著改善,因此 B 站使用更先进的编码标准为用户提供服务。

H.261的关键两原理

DCT变换

低频率部分是最重要的信息。

视频帧分类(初版)

先将视频分块,

  1. 重用不变的色块
  2. 对于平移的色块只记录移动矢量

帧间预测 & 帧内预测


关键帧I帧 与 预测帧P帧

MPEG-1

在 H.261 的基础上加入

  1. 双向预测帧B帧
    1. 更省空间,但是视频编码解码需要算力更大
  2. 帧序列的概念

BT文件命名概述

  • 标 AVC / H264 / H.264 / x264 的可以一律看作H264
  • 标 HEVC / HVC1 / H265 / H.265 / x265 的可以一律看作H265
  • GB / CHS / SC / zh-Hans 指简中
  • BIG5 / CHT / TC / zh-Hant 指繁中
  • 远离闲杂播放器,拥抱 Potplayer / IINA / VLC / MPC-BE / MPV
  • 容器
    • mkv,mp4
    • rmvb
      • RealMedia可变比特率(RMVB)。在网速缓慢的时代,边下载边看是巨大优势
      • 缺点:rm/rmvb格式编解码都是要收费。压缩比和速度都远逊于H264
    • avi
      • AVI是英语Audio Video Interleave(“音频视频交织”或译为“音频视频交错”)的首字母缩写,由微软在1992年11月推出的一种多媒体文件格式,用于对抗苹果Quicktime的技术。 现在所说的AVI多是指一种封装格式。
      • 图像数据和声音数据是交互存放的。从尾部的索引可以索引跳到自己想放的位置。
      • AVI與MP4本身只有聲音與影像沒有字幕

文字编码

  • ANSI 编码
    • 美国国家标准学会(American National Standards Institute)的缩写
    • ANSI并不是某一种特定的字符编码,而是在不同的系统中,ANSI表示不同的编码
    • 在简体中文系统下,ANSI 编码代表 GB2312 编码,在日文操作系统下,ANSI 编码代表 JIS 编码。
  • GB2312
    • 国家推出的常见6000汉字
  • GBK
    • 微软拓展了繁体汉字的普通技术规范,所以windows上基本都是默认GBK
  • UNICODE
    • Universal Multiple-Octet Coded Character Set 统一码,初始就25种文字
    • 采用了书写编码,导致会有长得像,但是完全不同的文字。导致很多钓鱼网站
  • UTF-8编码
    • UTF-8全称:8bit Unicode Transformation Format,8比特Unicode通用转换格式,是一种变长的编码方式。
    • 其编码中的第一个字节仍然与ASCII兼容。

需要进一步的研究学习

暂无

遇到的问题

暂无

开题缘由、总结、反思、吐槽~~

参考文献

https://bravoing.github.io/2020/02/14/%E8%A7%86%E9%A2%91%E6%92%AD%E6%94%BE%E5%99%A8%E5%8E%9F%E7%90%86%E3%80%81%E5%88%86%E8%BE%A8%E7%8E%87%E3%80%81%E5%B8%A7%E7%8E%87%E3%80%81%E7%A0%81%E7%8E%87/

作者:哔哩哔哩技术 https://www.bilibili.com/read/cv16198183 出处:bilibili

https://www.youtube.com/watch?v=0LSHhatwTxM

柴知道也行

https://www.jianshu.com/p/c23f3ea5443d

Streaming Protocol & Streaming Coding

流式传输 协议

常用的流媒体协议主要有两类:

  • HTTP渐进下载
  • 基于RTSP/RTP的实时流媒体协议。

在流式传输的实现方案中,一般采用

  1. HTTP/TCP来传输控制信息,
  2. 用RTP/UDP来传输实时多媒体数据。

RTP 、 RTCP (Real-time Transport Control Protocol)

  • 由IETF的多媒体传输工作小组1996年在RFC 1889中公布。
  • RTCP是RTP的一个姐妹协议
  • RTP协议的特点
    • RTP协议是建立在UDP协议上的。
    • RTP并不保证传送或防止无序传送,也不确定底层网络的可靠性。
    • RTP实行有序传送,RTP中的序列号允许接收方重组发送方的包序列。
    • RTP不像http和ftp可完整的下載整個影視檔,它是以固定的資料率在網路上發送資料,用戶端也是按照這種速度觀看影視檔,當影視畫面播放過後,就不可以再重複播放,除非重新向伺服器端要求資料。
  • RTCP特点
    • RTCP的主要功能是为RTP所提供的服务质量提供反馈来试图提高服务质量。RTCP收集相关媒体连接的统计信息,例如:传输字节数,传输分组数,丢失分组数,时延抖动,单向和双向网络延迟等等。来判断是否限制信息流量或改用压缩比较小的编解码器。
    • RTCP本身不提供数据加密或身份认证,其伴生协议SRTCP安全实时传输控制协议则可用于此类用途。

SRTP & SRTCP(Secure Real-time Transport Protocol)

  • 最早由IETF於2004年3月作為RFC3711發佈,提供加密、消息認證、完整性保證和重放保護。

RTSP(Realtime Streaming Protocol)

  • 于1998年发布为RFC 2326。RTSP 2.0 于2016年发布为RFC 7826,作为RTSP 1.0的替代品。
  • 专为娱乐和通信系统的使用,以控制流媒体服务器。
    • 媒体服务器的客户端发布VCR命令,例如播放,录制和暂停,以便于实时控制从服务器到客户端(视频点播)或从客户端到服务器(语音录音)的媒体流。
  • 流数据本身的传输不是RTSP的任务。大多数RTSP服务器使用实时传输协议(RTP)和实时传输控制协议(RTCP)结合媒体流传输。
  • 与RTP最大的区别在于:
    • RTSP是一种双向实时数据传输协议,它允许客户端向服务器端发送请求,如回放、快进、倒退等操作
    • 当然RTSP可基于RTP来传送数据,还可以选择TCP、UDP、组播UDP等通道来发送数据,具有很好的扩展性。
    • 它是一种类似于HTTP协议的网络应用协议。

RTMP(Real Time Messaging Protocol)

  • Adobe于2012年12月21日发布了该协议1.0版本的规范。
  • 是 Adobe Systems 公司为 Flash 播放器和服务器之间音频、视频和数据传输开发的开放协议。
  • 协议基于 TCP,是一个协议族,包括 RTMP 基本协议及 RTMPT/RTMPS/RTMPE 等多种变种。
    • RTMPT封装在HTTP请求之中,可穿越防火墙;
    • RTMPS类似RTMPT,但使用的是HTTPS连接。
    • RTMPE,使用Adobe自有安全機制加密的RTMP。雖然實現上的細節是專有的,但該機制使用行業標準的密碼學加密演算法。
  • RTMP 是目前主流的流媒体传输协议,广泛用于直播领域。
  • 默认通信端口1935。RTMP URL格式:rtmp://ip:[port]/appName/streamName
  • 特点
    • RTMP协议是采用实时的流式传输,所以不会缓存文件到客户端,这种特性说明用户想下载RTMP协议下的视频是比较难的;
    • 视频流可以随便拖动,既可以从任意时间点向服务器发送请求进行播放,并不需要视频有关键帧。相比而言,HTTP协议下视频需要有关键帧才可以随意拖动。
    • RTMP协议支持点播/回放(通俗点将就是支持把flv,f4v,mp4文件放在RTMP服务器,客户端可以直接播放),直播(边录制视频边播放)。

MMS(Microsoft Media Server Protocol)

  • 访问并流式接收Window Media服务器中.asf文件的一种协议。
  • 可以用Windows自带的Windows Media Player来观看

Web RTC(Web Real-Time Communications)

  • 于2011年6月1日开源并在Google、Mozilla、Opera支持下被纳入万维网联盟的W3C推荐标准。
  • 是一个支持网页浏览器进行实时语音对话或视频对话的API。
  • 目前主要应用于视频会议和连麦中。

HLS(Http Live Streaming, 明显是基于HTTP)

  • 是由苹果提出基于HTTP的流媒体传输协议。
  • 原理
    • 直播客户端获取到的并不是一个完整的数据流,HLS协议在服务器端将直播数据流存储为连续的、很短时长的媒体文件(MPEG-TS格式)(MPEG-2 Transport Stream;又称MPEG-TS、MTS、TS),而客户端则不断的下载并播放这些小文件,因为服务器总是会将最新的直播数据生成新的小文件,这样客户端只要不停的按顺序播放从服务器获取到的文件,就实现了直播。
  • 特点
    • 优点就是HTML5可以直接打开播放;分段文件的时长很短,客户端可以很快的选择和切换码率,以适应不同带宽条件下的播放。
    • 缺点就是延迟高。

HTTP-FLV(明显是基于HTTP)

  • 将直播流模拟成FLV文件,通过HTTP协议进行下载的模式来实现流媒体传输的协议。

各种软件使用的流式协议

moonlight

官网写着

Moonlight (formerly Limelight) is an open source implementation of NVIDIA’s GameStream protocol.

那么 NVIDIA’s GameStream protocol是什么呢?

NVIDIA uses high speed, low latency video encoders built into GeForce GTX or RTX GPUs along with an efficient streaming software protocol integrated into GeForce Experience.

我只能说看上去像自研的~但是马上也要没了

Nvidia isn’t just ending support for GameStream, it’s planning to fully remove the feature from existing Shield hardware in February 2023.
Nvidia is recommending that Shield users switch to Steam Link, which is a similar way of streaming PC games to a Shield device.

github老哥分析了。但我只能说肯定不是上面常见的类型。

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
sequenceDiagram
Client ->> Host: Discovery/Connect
Note over Client: Send client connection ID
Host ->> Client: Discovery/Connect ACK
Note over Client: Got host connection ID, start client handshake
Client ->> Host: Reliable/Control:ClientHandshake
par Discovery Channel
loop While True
Host ->> Client: Unconnected/Discovery:PingRequest
Client ->> Host: Unconnected/Discovery:PingResponse
end
end
Host ->> Client: Reliable/Control:ServerHandshake
Note over Client: Got mtu, start authentication
Client ->> Host: Reliable/Control:AuthenticationRequest
Host ->> Client: Reliable/Control:AuthenticationResponse
Host ->> Client: Reliable/Control:NegotiationInit
Note over Client: Got host supported audio/video codecs
Client ->> Host: Reliable/Control:NegotiationSetConfig
Note over Client: Send selected codecs and config
Host ->> Client: Reliable/Control:NegotiationSetConfig
Note over Client: Got final config, respond with complete
Client ->> Host: Reliable/Control:NegotiationComplete
par Audio Data Channel
Host ->> Client: Reliable/Control:StartAudioData
loop Not StopAudioData
Host ->> Client: Unreliable/Data:Packet
end
and Video Data Channel
Host ->> Client: Reliable/Control:StartVideoData
loop Not StopVideoData
Host ->> Client: Unreliable/Data:Packet
end
end
Client ->> Host: Discovery/Disconnect

流式传输 视频压缩编码

主流还是 H.264 或者 HEVC。 流式传输时为了保证帧率可能会牺牲画面。

Steam Link 的相关设置

需要进一步的研究学习

暂无

遇到的问题

暂无

开题缘由、总结、反思、吐槽~~

参考文献

山东布谷科技 https://www.bilibili.com/read/cv9502267?from=search&spm_id_from=333.337.0.0 出处:bilibili

Wake On Lan(Wol)

简介

Wake-on-LAN 也叫 WoL,指通过网络消息打开或唤醒计算机。

WoL 需要由另一台「同局域网」设备发送网络信号,任意有能力发送 WoL 信号 的设备都可以充当此角色;在远程办公场景中,则最好由「带有线网卡的低功耗设备」来执行,这类设备包括但不限于以下选项:

  1. 带网络唤醒 WoL 功能的路由器产品
  2. OpenWrt Linux 设备「TP-Link 703n」
  3. 树莓派「推荐 2 代」

网络扫描

获取局域网下设备MAC地址, 或者OpenWRT直接显示

平台 工具
Windows Softperfect Network Scanner
Linux arp-scan
Android / iOS Fing / PingTools

发出唤醒信息的软件

可以使用的幻数据包唤醒工具有:

平台 工具 特点
Windows wolcmd.exe 命令行,跨网段
Linux/MacOS etherwake, wakeonlan 命令行,同网段
Android / iOS Fing / PingTools 可扫描

请注意,WoL 属于无状态协议,仅发送、不确认。

问题:抓包发现 WolCmd和wakeonlan的目的地址不同

1
2
3
4
5
6
7
8
9
10
11
WolCmd.exe 90:09:D0:15:70:B8 192.168.233.242 255.255.255.255 9 (目的地址 192.168.233.242)
WolCmd.exe 90:09:D0:15:70:B8 192.168.233.242 255.255.255.0 9 (测试过本地能成功,br-lan路由器能抓, 本地wireshark目的地址 192.168.233.255)


WolCmd.exe 90:09:D0:15:70:B8 192.168.233.242 0.0.0.0 9 (目的地址 192.168.233.109.53362 > 255.255.255.255.9 注意:109是macboook)

shaojiemike@shaojieikedeAir ~/github/hugoMinos (main*) [11:46:22]
> wakeonlan 90:09:D0:15:70:B8 (目的地址 192.168.233.109.53362 > 255.255.255.255.9 注意:109是macboook)
Sending magic packet to 255.255.255.255:9 with payload 90:09:D0:15:70:B8
Hardware addresses: <total=1, valid=1, invalid=0>
Magic packets: <sent=1>

路由遇到目的MAC是广播地址怎么办?

IP的广播有三种:

  1. 255.255.255.255叫本地广播,也叫直播,direct broadcast,不跨路由器。
  2. 172.16.33.255叫子网广播,广播给172.16.33.0这个子网,可以跨路由器
  3. 172.16.255.255叫全子网广播,广播给172.16.0.0这个主网,可以跨路由器。

路由器是三层设备,可以隔离广播,但并不是所有广播都隔离。事实上只有本地广播路由器才不转发,对于子网广播和全子网广播,路由器是转发的。

为什么呢?我们来看255.255.255.255的广播,在MAC的封装中,对应的目的MAC是广播,而子网广播和全子网广播,对应的目的MAC是单播,所以路由器会转发。所以路由器隔离的广播是目的MAC为全1的广播,对于目的MAC是单播的上层广播,路由器是不能隔离的。

广播规则

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
> netstat -r -anv
Routing tables

Internet:
Destination Gateway Flags Netif Expire
default 192.168.233.1 UGScg en0
127.0.0.1 127.0.0.1 UH lo0
192.168.233 link#11 UCS en0 !
192.168.233.1/32 link#11 UCS en0 !
192.168.233.1 5c:2:14:b3:2:a UHLWIir en0 1172
192.168.233.109/32 link#11 UCS en0 !
192.168.233.242 90:9:d0:15:70:b8 UHLWI en0 151
192.168.233.255 ff:ff:ff:ff:ff:ff UHLWbI en0 !
255.255.255.255/32 link#11 UCS en0 !
255.255.255.255 ff:ff:ff:ff:ff:ff UHLWbI en0 !

路由器

1
2
3
4
5
6
7
8
9
[root@ax6s ~]$ ip route get to 192.168.233.242 from 192.168.233.142 iif lan2
192.168.233.242 from 192.168.233.142 dev br-lan
cache iif lan2
[root@ax6s ~]$ ip route get to 192.168.233.255 from 192.168.233.142 iif lan2
broadcast 192.168.233.255 from 192.168.233.142 dev lo table local
cache <local,brd> iif lan2
[root@ax6s ~]$ ip route get to 255.255.255.255 from 192.168.233.142 iif lan2
broadcast 255.255.255.255 from 192.168.233.142 dev lo
cache <local,brd> iif lan2

电脑需要远程被远程唤醒

电脑设置

  1. 「网络连接」
    1. 以太网(有线网)属性
    2. 【网络】(Realtek PCIe 2.5GbE Family Controller)下配置
    3. 【电源管理】勾选「允许此设备唤醒计算机」以及「只允许幻数据包唤醒计算机」
  2. BIOS打开相关选项
    1
    2
    3
    4
    5
    Automatic Power On
    Wake on LAN/WLAN
    Power Management
    Power On by Onboard LAN
    Power On by PCI-E Devices

需要进一步的研究学习

暂无

遇到的问题

暂无

开题缘由、总结、反思、吐槽~~

Nas 太吵,需要自动关机

参考文献

https://sspai.com/post/67003

https://www.depicus.com/wake-on-lan/wake-on-lan-cmd

Ed2k

基本原理

区别于BT,核心概念在于文件共享。

  1. 设置共享目录,该目录中的所有文件,都会实时共享到eDonkey和KAD网络中。
  2. 目录中共享了的文件都会生成eD2k链接,所有人通过相应的eD2k链接,都能够拿到你共享的文件,
    1. 一旦有人下载相应文件,那么你的eMule客户端就会上传数据。
    2. 平时使用eD2k链接下载,资源也是来自他人eMule所共享的文件的。
    3. 当然,共享目录中也可以啥都不放,但很多eMule客户端都拥有队列优先级机制,上传得少,下载速度也会被限制。

与BT的区别

  1. 资源持久性
    1. 对于BT来说,用户被视为下载者。当用户上传到指定比率作为一个下载者的义务就完成了,一般就停止上传了,这使得BT在下热门资源的时候速度快,但是对冷门资源来说即使这个文件没有被删除也不会有上传者了。
    2. 而对于eMule来说,用户被视为分享者。只要用户文件没被删除作为资源分享者就一直上传,这样可以长期保源。
  2. 资源搜索能力
    1. BT协议中没搜索功能
    2. eMule搜索的时候每个资源大小来源数甚至拥有者对其的评价都是一目了然的,这样使得资源广泛分布,也有利于资源优胜劣汰,从而达到长期保源的目的。

基本概念

eD2k:

eDonkey网络所使用的协议,eDonkey网络所共享的文件会生成eD2k开头的链接。

电驴

eDonkey2000:(又称:eDonkey;缩写:eD2k;非官方中文译名:电驴)最先开发使用eDonkey网络的文件共享客户端软件。2000年起开发,2005年停止维护,之后eDonkey网络被其他软件沿用。

电骡

eMule:(官方中文名:电骡)eMule及其Mods是现在最流行的一款eDonkey网络文件共享客户端软件。2002年起开发。

需要进一步的研究学习

暂无

遇到的问题

暂无

开题缘由、总结、反思、吐槽~~

参考文献

作者:qysnn
链接:https://www.zhihu.com/question/19922200/answer/29022933
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。