Linux的ip命令-路由-网卡设备-统计

Linux的ip命令和ifconfig类似,但前者功能更强大,并旨在取代后者。使用ip命令,只需一个命令,你就能很轻松地执行一些网络管理任务。ifconfig是net-tools中已被废弃使用的一个命令,许多年前就已经没有维护了。Linux系统提供iproute2工具用于替代一些常用的net-tools命令,iproute2套件里提供了许多增强功能的命令,ip命令即是其中之一。

格式:

ip [options] object [command [arguments]]

主要参数
OPTIONS是修改ip行为或改变其输出的选项。所有的选项都是以-字符开头,分为长、短两种形式。如link、addr、route、rule、tunnel 。
object是要管理者获取信息的对象。如网络接口类型eth0。
command设置针对指定对象执行的操作,它和对象的类型有关。一般情况下,ip支持对象的增加(add)、删除(delete)和展示(show或list)。有些对象不支持这些操作,或者有其它的一些命令。对于所有的对象,用户可以使用help命令获得帮助。这个命令会列出这个对象支持的命令和参数的语法。如果没有指定对象的操作命令,ip会使用默认的命令。一般情况下,默认命令是list,如果对象不能列出,就会执行help命令。
arguments是命令的一些参数,它们倚赖于对象和命令。ip支持两种类型的参数:flag和parameter。flag由一个关键词组成;parameter由一个关键词加一个数值组成。为了方便,每个命令都有一个可以忽略的默认参数。例如,参数dev是ip link命令的默认参数,因此ip link ls eth0等于ip link ls dev eth0。命令的默认参数将使用default标出。

  1. IP地址管理
    设置和删除Ip地址
    设置一个IP地址,可以使用下列ip命令:
    ip addr add 192.168.0.193/24 dev wlan0
    请注意IP地址要有一个后缀,比如/24。这种用法用于在无类域内路由选择(CIDR)中来显示所用的子网掩码。在这个例子中,子网掩码是255.255.255.0。

需要查看是否已经生效。
ip addr show wlan0
删除IP地址
ip addr del 192.168.0.193/24 dev wlan0

  1. 路由管理
    列出路由表条目
    IP命令的路由对象的参数还可以帮助你查看网络中的路由数据,并设置你的路由表。第一个条目是默认的路由条目,你可以随意改动它。
    ip route show
    查看路由表
    假设现在你有一个IP地址,你需要知道路由包从哪里来。可以使用下面的路由选项(译注:列出了路由所使用的接口等):

ip route get 119.75.216.20
查看路由包
添加默认路由
ip route add default via 192.168.202.254
添加网络路由
ip route add 192.168.4.0/24 via 192.168.4.1
修改网络路由
ip route change 192.168.4.0/24 dev eth1
设置NAT路由
ip route add nat 192.168.1.100 via 192.168.1.1
1.
查看某个路由表信息
ip route show table main
ip route show table local
ip route show table all

可以使用以下方式获取到特定ip的路由信息:

bob@ubuntu-20-04:~$ ip route get to 192.168.43.2


擦除所有路由表

ip route flush

擦除路由表的缓存

ip route flush cache

  1. 网络统计
    显示网络统计数据
    使用ip命令还可以显示不同网络接口的统计数据。
    ip -s link
    网络统计数据
    当你需要获取一个特定网络接口的信息时,在网络接口名字后面添加选项ls即可。使用多个选项-s会给你这个特定接口更详细的信息。特别是在排除网络连接故障时,这会非常有用。

ip -s -s link ls docker0

ip -s link ls docker0

  1. ARP管理
    查看ARP信息
    地址解析协议(ARP)用于将一个IP地址转换成它对应的物理地址,也就是通常所说的MAC地址。使用ip命令的neigh或者neighbour选项,你可以查看接入你所在的局域网的设备的MAC地址。
    ip neighbour
  2. 网络监测
    监控netlink消息
    可以使用ip命令查看netlink消息。monitor选项允许你查看网络设备的状态。比如,所在局域网的一台电脑根据它的状态可以被分类成REACHABLE或者STALE。使用下面的命令:
    ip monitor all
  3. 网络接口设置
    激活和停止网络接口
    你可以使用ip命令的up和down选项来激某个特定的接口,就像ifconfig的用法一样。

停止网络接口eth0

ip link set eth0 down

启动网络接口eth0

ip link set eth0 up
修改设置传输队列的长度
ip link set dev eth0 txqueuelen 100

ip link set dev eth0 txqlen 100
修改网络设置MTU(最大传输单元)的值
ip link set dev eth0 mtu 1500
修改网卡的MAC地址
ip link set dev eth0 address 00:01:4f:00:15:f1

  1. 路由策略设置
    ip rule命令中包含add、delete、show(或者list)等子命令,注意:策略路由(policy routing)不等于路由策略(rouing policy)。在某些情况下,我们不只是需要通过数据包的目的地址决定路由,可能还需要通过其他一些域:源地址、IP协议、传输层端口甚至数据包的负载。这就叫做:策略路由(policy routing)。

插入新的规则

ip rule add

删除规则

ip rule delete

显示路由表信息

ip rule list

子命令可以用如下缩写:add、a;delete、del、d

示例1: : 双网卡数据路由策略选择,让来自192.168.3.0/24的数据包走11.0.0.254这个网关,来自192.168.4.0/24的数据包走12.0.0.254这个网关

定义表
echo 10 clinet_cnc >>/etc/iproute2/rt_tables
echo 20 clinet_tel >>/etc/iproute2/rt_tables
把规则放入表中
ip rule add from 192.168.3.0/24 table clinet_cnc
ip rule add from 192.168.4.0/24 table clinet_tel
添加策略路由
ip route add default via 11.0.0.254 table clinet_cnc
ip route add default via 12.0.0.254 table clinet_tel
刷新路由表

ip route flush cache

来自51CTO博客作者计算机控制挖掘机炒菜?的原创作品

linux命令

docker ps命令用来展示所有运行中的容器

docker ps -a命令是用来展示所有的容器,包括未运行的容器

curl 是常用的命令行工具,用来请求 Web 服务器,它的功能非常强大,命令行参数多达几十种。如果熟练的话,完全可以取代 Postman 这一类的图形界面工具,

不带有任何参数时,curl 就是发出 GET 请求。


$ curl https://www.example.com

上面命令向www.example.com发出 GET 请求,服务器返回的内容会在命令行输出。
#curl cip.cc 查询IP地址归属地

参考:https://www.ruanyifeng.com/blog/2019/09/curl-reference.html

ps

ps (英文全拼:process status)命令用于显示当前进程的状态,类似于 windows 的任务管理器。

grep

命令用于查找文件里符合条件的字符串。

grep 指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为 -,则 grep 指令会从标准输入设备读取数据。

grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。

 ps -ef |grep

通过上述解释,可以得知ps是一个命令,grep是一个命令,中间的|代表管道命令,表示ps命令和grep命令同时执行

示范

ps -ef |grep python 这条命令代表检查python进程是否存在

显示列字段解释
  • UID      :程序被该 UID 所拥有
  • PID      :就是这个程序的 ID 
  • PPID    :则是其上级父程序的ID
  • C          :CPU使用的资源百分比
  • STIME :系统启动时间
  • TTY     :登入者的终端机位置
  • TIME   :使用掉的CPU时间。
  • CMD   :所下达的是什么指令

nload -m

查看所有网卡实时流量情况,-m参数表示不以图表,而以统计数据显示

du -sh 查看当前目录使用情况

du -sh * 查看当前目录下子目录使用情况,可以直接把*号变目录名来查目录空间使用情况

du -sh /*  表示根目录使用情况

df -ah df列出磁盘总容量、可用容量、使用%、接入点等信息,而du只是合计磁盘的使用量。-h选项表示人性化显示格式。

tail Linux中用于查看文件尾部的内容,与head相对应。
常用来查看日志文件,通过-f实时查看文件最新内容。

尤其是对于日志文件较大的时候,通过tail指定输出的行数来查看日志。

// 输出最后10行的内容
tail test.log

// 输出最后10行的内容,同时监视文件的变化,一旦变化就显示出来
tail -f test.log

// 输出最后n行的内容,同时监视文件的变化,一旦变化就显示出来
tail -nf test.log

// 输出文件最后10行的内容
tail -n 10 filename
// 除第9行不显示外,显示第10行到末尾行
tail -n -10 filename

// 从第20行至末尾
tail +20 test.log

// 显示最后10个字符
tail -c 10 test.log

// 实时日志查看与grep过滤关键字
// -A 除显示符合t匹配内容的那一行之外,并显示该行之后的内容
// -B 除显示符合匹配内容的那一行之外,并显示该行之前的内容
// -C 除显示符合匹配内容的那一列之外,并显示该列前后的内容
tail -f test.log | grep ‘test’ -C 5
tail -f test.log | grep ‘test’ -5

使用 PuTTY 安全复制客户端将文件传输到您的 Linux 实例

PuTTY 安全复制客户端 (PSCP) 是一个命令行工具,可用于在 Windows 计算机和 Linux 实例之间传输文件。

要使用 PSCP,您需要使用在使用 PuTTYgen 转换私有密钥中生成的私有密钥。您还需要使用 Linux 实例的公有 DNS 名称或 IPv6 地址(如果实例具有该地址)。

以下示例将 Sample_file.txt 文件从 Windows 计算机上的 C:\ 驱动器传输到 Amazon Linux 实例上的 instance-user-name 主目录。要传输文件,请使用以下命令之一。

  • (公有 DNS)要使用实例的公有 DNS 名称传输文件,请输入以下命令。pscp -i C:\path\my-key-pair.ppk C:\path\Sample_file.txt instance-user-name@instance-public-dns-name:/home/instance-user-name/Sample_file.txt
  • (IPv6) 或者,如果实例具有 IPv6 地址,要使用实例的 IPv6 地址传输文件,请输入以下命令。IPv6 地址必须用方括号 ([ ]) 括起来。pscp -i C:\path\my-key-pair.ppk C:\path\Sample_file.txt instance-user-name@[instance-IPv6-address]:/home/instance-user-name/Sample_file.txt

如果您更喜欢图形用户界面 (GUI),您可以使用一种叫作“WinSCP”的开源 GUI 工具。

WinSCP 是适用于 Windows 的基于 GUI 的文件管理器,您可以通过它来使用 SFTP、SCP、FTP 和 FTPS 协议将文件上传并传输到远程计算机。WinSCP 允许您将文件从 Windows 计算机拖放到 Linux 实例,或者在两个系统之间同步整个目录结构。

但您的 Linux 实例必须已安装 scp。对于某些操作系统,您需要安装 openssh-clients 软件包。对于其他操作系统(例如经 Amazon ECS 优化的 AMI),您需要安装 scp 软件包。请参阅您的 Linux 发行版的文档。

TCPing监听服务器的端口状态

当服务器设置了禁ping,TCPING可以监听服务器的端口状态,默认是80端口的,也可以指定其它端口。也可以看到ping 返回的时间

下载的tcping.exe或者tcping64.exe文件放到C:\Windows\System32目录下(ping命令也是在这个目录下)

“ tcping www.baidu.com”

“ tcping -t www.baidu.com 【参数-t 是让命令一直运行ping 】”

“ tcping -d -t www.baidu.com 【参数 -d 是显示时间,这样就可以更清楚了】”

“ tcping -d -t www.baidu.com 443/21 【这里只是举例,21是您所需要监听的端口,这个可以行定义。】”

无线路由下嗅探

1.openwrt路由下安装 tcpdump(可以将网络中传送的数据包完全截获下来提供分析)

  1. opkg update
  2. opkg install tcpdump

2.电脑装wireshark 和plink.exe(plink是putty下的一个工具,可以在windows下直连liunx并自动执行命令的工具)
https://www.wireshark.org/download.html
http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

3.路由下tcpdump抓包,PC端使用 wireshark 实时监听

  1. plink.exe -ssh -pw admin root@192.168.4.1 “tcpdump -ni wlan0 -s 0 -w – not port 22” | “C:\Program Files\Wireshark\Wireshark.exe” -k -i –

  admin 是路由的密码,root是用户名 ,wlan0 无线网卡 的数据链路层代号,
  ifconfig 可以看到具体详细信息,tcpdump的指令就不多说了,看官方文档吧


4.分析数据报文,获取敏感信息

  假如你使用了我的wifi,登录了百度的主页,我就获取你的登录cookies,
  有了cookies可以不用密就能登录你的百度账号,  浏览你的各种百度云盘里面的内容。
   

  wireshark 添加过滤的条件“http.cookie“  获取cookies的相关报文,点中右键,follow tcp steam,看到完整的报文,

  复制 http 请求时向服务器发送的cookies 字符串
              

5.注入cookies,登录账号
chrome 下使用一个 CookieHacker的插件 ,下载 http://evilcos.me/?p=366
打开 baidu.com,把cookies的字符串粘贴,点击inject cookie

刷新一下就看到用户已经登录了
P.S. 除了这些以外,你发出的所有请求都能在wireshark里面分析出来,当然这只是最简单的嗅探而已,

s-s搭建记录

客户端下载地址

服务端一键安装脚本(安装的go版本,但电脑客户端一些加密方式好像不支持)

wget --no-check-certificate -O shadowsocks-go.sh https://raw.githubusercontent.com/poetries/shadowsocks_install/master/shadowsocks-go.sh

chmod +x shadowsocks-go.sh
./shadowsocks-go.sh 2>&1 | tee shadowsocks-go.log

安装完成后,脚本提示如下:

Congratulations, Shadowsocks-go install completed!
Your Server IP:your_server_ip
Your Server Port:your_server_port
Your Password:your_password
Your Local Port:1080
Your Encryption Method:aes-256-cfb

Welcome to visit:https://teddysun.com/392.html
Enjoy it!

卸载方法

./shadowsocks-go.sh uninstall

可以查看 Shadowsocks-go 进程是否已经启动。 本脚本安装完成后,已将 shadowsocks-go 加入开机自启动。

使用命令:

  • 启动:/etc/init.d/shadowsocks start
  • 停止:/etc/init.d/shadowsocks stop
  • 重启:/etc/init.d/shadowsocks restart
  • 状态:/etc/init.d/shadowsocks status

多用户多端口配置文件示例: 配置文件路径:/etc/shadowsocks/config.json

{
    "port_password":{
         "8989":"password0",
         "9001":"password1",
    },
    "method":"aes-256-cfb",
    "timeout":600
}

根据上面的在ubuntu上只能安装go版本,而只能手机端用,WIN客户端有的加密方式,GO版本都没有,最后在github上找到v2ray服务器安装脚本,用的aws东京但只在debian系统装测试成功。客户端WIN一般用v2rayN,手机端用v2rayNG,v2flyNG,大家可直接在github下载

自动安装脚本

bash <(curl -s -L https://git.io/v2ray.sh)

另外推荐XUI
bash <(curl -Ls https://raw.githubusercontent.com/vaxilu/x-ui/master/install.sh)

传送门

AWS云主机 及使用中的坑

前往亚马逊官网注册,自己根据里面的资料慢慢填写即可。填写过程中必须要绑定信用卡

信用卡账单,在亚马逊官网信用卡付费是不需要密码的,也就是根据你的信用卡正反面信息即可直接在网络上操作扣费(一般扣费都可以申请追回,最好申请资金进出短信提醒),自己的信用卡自己保护好。亚马逊当然不会恶意扣费,只是免费套餐限制多,超出部分是要扣费的;

白嫖教程

创建EC2实例

进入控制中心,先选择地区,右上角有地区选择。如果搭建SS,建议亚太地区,如果是纯粹的网站。那就根据你的目标用户的位置来选择了。

图片[2] - Amazon – AWS免费一年云主机 以及使用中的一些坑 - 云线路

选择好了地区后,点击[服务]中的[EC2],现在我们就要开始创建EC2实例了。

图片[3] - Amazon – AWS免费一年云主机 以及使用中的一些坑 - 云线路
图片[4] - Amazon – AWS免费一年云主机 以及使用中的一些坑 - 云线路

选择“仅限免费套餐”,这里我选择的是Red Hat,因为Red Hat更接近于CentOS,习惯用CentOS了。

图片[5] - Amazon – AWS免费一年云主机 以及使用中的一些坑 - 云线路

实例只能选择[符合条件的免费套餐],选择其他会产生费用的

然后创建密钥对,如果用putty连建议选ppk格式,否则要用工具再把ppm转成ppk,建好后

[安全组配置]选择默认规则就好了,稍后我们在[安全组]里修改为全部放行(注意入站、出站都要修改为全部放行)

图片[8] - Amazon – AWS免费一年云主机 以及使用中的一些坑 - 云线路

设置[安全组配置]

图片[9] - Amazon – AWS免费一年云主机 以及使用中的一些坑 - 云线路

查看实例,并用XFTP或者SSH连接

图片[10] - Amazon – AWS免费一年云主机 以及使用中的一些坑 - 云线路

XFTP或者SSH上填写好登录地址和用户名后导入密钥

如果最后一步出现错误,那是账号还没有完全通过审核,需要等待5分钟-4小时,邮件收到通过审核后再去创建实例;

如果显示创建成功可以正常使用了,这里又个坑,每月的免费流量只有100G,超过后就会在你的信用卡上扣费,所以我们要监控云主机的流量不要超过100G的出站流量;可以直接登录后点用户名,选进到账户页面再选左边的“FREE TIER”来查看免费套餐的使用情况,也可以按下面方式来统计

可以进实例后点中间的“监控”,里面选“网络输入”(还有网络输出也一样)面板的右上角选“在指标中查看”

图片[13] - Amazon – AWS免费一年云主机 以及使用中的一些坑 - 云线路

这里修改统计数据为总和,周期为30天,把上面的线形图改成数字,这样就可以统计一个月的流量数据了,(也可以点击左上角[服务]选择[管理与监管]–[CloudWatch]在这个里面来统计),还可以把统计数据添加到控制面板里,以后就不用繁琐操作看流量统计了

但这里又有个坑,ec2-user这个用户权限太低,我们需要root的权限。登录用证书登录也很麻烦,也需要一并去掉。

可以后台直接连接主机,也可以用putty填好IP后在 连接-SSH-认证里把私钥(putty要ppk格式,如是ppm要用PuTTYgen把格式转为ppk)传上去后再连接主机,刚进去一般用户名是ec2-user,如ubuntu用户名是ubuntu,红帽是admin,用普通用户连上系统后

创建root的密码,输入如下命令:

sudo passwd root

会提示你输入new password。输入一个你要设置的root的密码,需要你再输入一遍进行验证;

接下来,切换到root身份,输入如下命令:

su root

给ec2-user加个密码,输入如下命令:

passwd ec2-user

使用root身份编辑亚马逊云主机的ssh登录方式,在/etc/ssh/sshd_config找到三个地方,把no改成yes 输入:

vi /etc/ssh/sshd_config

键盘P、i编辑,esc、:wq保存

PermitRootLogin yesPasswordAuthentication yesUsePAM yes

接下来,要重新启动下sshd,这里重启sshd命令有可能不会生效需要重启系统:

reboot

这样就可以使用root身份直接登录ssh了,接下来可以删除ec2-user这个用用户了:

uesrdel -r ec2-user

这里还有个情况需要说明下,用Red Hat系统的话我是实测无法安装军哥的LNMP和宝塔的,也就是说如果需要安装网站环境的话需要自己编译WEB环境,或者更换成UBUNTU系统使用LNMP或者宝塔(这里我没测试),本人只用来搭建SS扶墙。

下面说下安装秋水的SS一键脚本,使用Shadowsocks-python版本无法搭建成功,这里我测试安装成功的是Shadowsocks-go,希望大家不要走弯路。

总结

注册AWS要使用从未在AWS上用过的信用卡,不然你就不符合Free Tier的使用条件,所有服务将会按需收费,申请免费成功后免费服务只有一年的有效期,到期时记得导出数据并停止所有服务;

免费额度只够创建一个EC2实例;

创建实例时,要选带有免费提示的操作系统,这类系统是免费提供的,不另收费;

建站时不要使用RHEL(Red Hat Enterprise Linux),此系统占用的EBS空间大而且极费IO,每月200万的免费IO可能不出几天就能耗完;

每月的免费存储是5G,注意不要超出这个上限,另外GET,POST等操作可能会超出免费额度;

流入AWS的流量完全是免费的,但每月的免费流出流量只有15G,超出部分就要收费了。而且这15G对于所有的AWS服务来说是共享的。托管一个小网站,架设个SS,明显不够用嘛;

基本监控是免费的,再高级别的就要收费了。免费监控虽说不够详细,但是足够让我们了解服务器最近一段时间的运行状况了,没必要使用高级别的监控服务;

因为实例每次停止再启动,IP都会变,所以如果经常停止,可以申请绑个弹性IP,把IP固定下来,绑在实例上的弹性IP是不收费的,但弹性IP没有捆绑到EC2实例时,一定要记得释放,如免费实例到期后弹性IP也要放,不然它会按小时收费。而且每月g头100次捆绑Elastic IP到EC2实例是免费的,超出则收费啦;

区块链POW和POS的区别

如果你是一名资深的比特币矿工或商人,你一定听说过POW和POS,但是当前在国内,却几乎没有人明白这到底是什么意思,也几乎没有相关的中文资料,小编吐血撰写,是为了让大家更好理解这些概念。

读完本文,相信会让你明白,原来,虚拟货币除了挖矿,还有利息!

第一段:通俗的概念解析

POW:全称Proof of Work,工作证明。

这是什么意思呢?这就是说,你获得多少货币,取决于你挖矿贡献的有效工作,也就是说,你电脑性能越好,分给你的矿就会越多,这就是根据你的工作证明来执行货币的分配。大部分的虚拟货币,比如比特币、莱特币等等,都是基于POW模式的虚拟货币(算力越高、挖矿时间越长,你获得的货币就越多)。

POS:全称Proof of Stake,股权证明。

这又是什么意思呢?简单来说,就是一个根据你持有货币的量和时间,给你发利息的一个制度,在股权证明POS模式下,有一个名词叫币龄,每个币每天产生1币龄,比如你持有100个币,总共持有了30天,那么,此时你的币龄就为3000,这个时候,如果你发现了一个POS区块,你的币龄就会被清空为0。你每被清空365币龄,你将会从区块中获得0.05个币的利息(可理解为年利率5%),那么在这个案例中,利息 = 3000 * 5% / 365 = 0.41个币,这下就很有意思了,持币有利息,非常好!(需要注意的是,5%的年利率仅仅是小编举例,并非每个POS模式的币种都是5%,比如点点币PPCoin就是1%年利率)

第二段:市面的POS和POW货币

前面我们已经学习了POS和POW的概念了,接下来我们看看,现在市面上的货币,哪些支持POW,哪些支持POS呢?

答案是:除了点点币PPCoin、新星币NovaCoin、雅币YaCoin这三个电子货币采用POW+POS结合的模式外,目前其余所有的货币都只采用了POW模式,而没有采用POS模式。

点点币PPCoin首次实现POS(年利率1%)

POS这个概念,最早在比特币项目里,就被提及,不过,在后续的实现当中,比特币开发团队考虑到其稳健性未经考验,并没有将它实现到比特币的系统中。直到2012年8月,一个叫点点币PPCoin(简称PPC)的电子货币出现,才真正实现了POS,这是PPCoin赖以成名的核心元素,PPCoin既支持POW模式的挖矿收入,也提供了POS模式下的利息收入。当时PPCoin给他们的货币设定了1%的年利率,并取得了很好的市场反响,很多用户大量囤积PPCoin来获取利息。

新星币NVC助力POS(年利率5%)

不过,由于POS难以被世人理解,且1%年利率的吸引力实在是低了点,后续出现的新型电子货币,很少使用POS模式。2013年2月,俄罗斯一个研发团队发布了第二款采用POS的货币新星币NovaCoin(简称NVC),NVC将算法进一步进行优化(采用scrypt),使其交易速度更快,同时将年利率修改为5%。NovaCoin的这两项修改大获成功,这让其每一个币的价值超越了号称白银货币的山寨币之王——莱特币LTC。小编发稿时,一个莱特币LTC等价于0.021个比特币,而一个新星币NVC则等价于0.033个比特币。

第三个POS货币——雅币YaCoin(年利率5%)

2013年5月,第三个采用POS模式的电子货币发布,它就是雅币,英文名YACoin,简称YAC。雅币YAC在新星币NVC的基础上再次有了重大突破和创新,它采用了新型的scrypt-jane算法,这个算法的特性之一,就是对CPU有着强烈的依赖,在此之前,所有已经出现的电子货币,都更依赖于显卡芯片GPU进行挖矿的运算,使用GPU进行挖矿的效率远远超过CPU。而雅币YAC一举打破了这个局面,它的新算法使其在使用CPU运算时,效率超过了GPU,这得到了很多没有好显卡的用户强烈支持,具有着不错的用户群。作为一个支持POS的电子货币,雅币YAC和新星币NVC一样提供了5%的年利率。

第四个来了——宇宙币CosmosCoin(年利率1.5%)

宇宙币CMC是第四款采用POS模式的电子货币,尽管CMC和CNC从名字上看着像兄弟,但其实他们什么关系都没有,因为CMC可比CNC优秀太多了。CMC在NVC的基础上新增了交易留言功能,采用加强难度的scrypt算法,产量每天只有5040个,稀缺性明显,在山寨币当中来看,币值相对较高,可以尝试挖掘存储。CMC和前面3款POS货币的年利率都不都,它提供了1.5%的年利率。

第三段:POS的设计理念和起源

POS的设计理念,来自于对比特币危机的思考,原因有三:

首先,我们都知道,比特币的区块产量每4年会减半,在不久的未来,随着比特币区块包含的产量越来越低,大家挖矿的动力将会不断下降,矿工人数越来越少,整个比特币网络有可能会逐渐陷入瘫痪(因为大家都减少了运行比特币客户端的时间,因此越来越难找到一个P2P节点去连接和同步网络数据)。

POS解决方案:在POS体系中,只有打开钱包客户端程序,才能发现POS区块,才会获得利息,这促使很多不想挖矿的人,也会常常打开自己的钱包客户端,这帮助了P2P货币网络的健壮。

其次,若干年后,随着矿工人数的下降,比特币很有可能被一些高算力的人、或团队、或矿池,进行51%攻击,导致整个比特币网络崩溃。51%攻击简单来说,就是当你拥有了超过全球51%的比特币算力时,你将能伪造比特币网络的任何数据,比如你伪造你有一百万个比特币但实际上你没有。(拓展阅读:什么是51%攻击)

POS解决方案:在POS体系中,即使你拥有了全球51%的算力,也未必能够进行51%攻击,因为,有一部分的货币并不是挖矿产生的,而是由利息产生(利息存放在POS区块中),这要求攻击者还需要持有全球超过51%的货币量。这大大提高了51%攻击的难度。

第三,虽然我们知道比特币是一个永远不会通货膨胀的体系,因为他的货币总量表面看起来是固定的,但是,你是否知道,比特币其实是一个通货紧缩的体系。因为,当我们重装了系统,或者忘记了钱包密钥时,我们会永远无法再拿回钱包里的钱,这意味着,每年都会有一些比特币随着钱包的丢失而永远被锁定,这就形成了实质上的通货紧缩,也许在五十年后,有效的比特币,将会只剩下一千万个。

POS解决方案:提供一定的年利率,尽可能保证既不通货膨胀,也不通货紧缩。

PON网络数据传输方式

那在OLT与POS之间其实只有一根光纤,如何实现上下行的数据在一根光纤中传输呢?

【答案】:划分不同的车道,即规划不同的波长。

【解析】:在PON网络中,上下行通信所采用的波长是不一样的,比如EPON/GPON同属于1G PON技术,它们下行波长规划的是1490nm,上行波长规划的是1310nm,互不影响,完全可以实现双向全双工的通信。此外,还有广电的CATV业务,单独的波长规划时1550nm。

到这里,有小伙伴又有疑问了:

为什么规定下行波长是1490nm,上行是1310nm,而不是反过来呢?

【答案】:成本考虑。

【解析】:标准制定的时候,1310nm的光器件已经相对来说比较成熟,成本较低,而1490nm成本较高。PON是一个点到多点的架构,那么我们自然要将成本比较低器件放在多点侧的发端,这样才会大量的降低PON网络初期的部署成本。

下面我们继续回到PON网络的数据传输的介绍。PON下行采用广播的方式传输数据,上行采用的是TDMA的方式传输数据。一连串的疑问又来了:

PON下行为何采用广播的方式传输数据呢?

【答案】:因为简单实用。

【解析】:PON的下行方向是指从OLT到ONU的这个方向,这个方向发端与收端的数量对比关系是“1对多”的关系,那我们自然就会选择用广播的方式来发送数据,因为这样最省事。同时,下行因受限于无源分路器的物理特性,PON口发出的数据经过无源分路器后平均分配至每一分路,其无源物理特性无法控制某一分路的通与不通,仅能实现单纯分路功能,故下行依据物理分路特性实现了被动广播的现象。

PON下行采用广播,每个ONU都能收到其他ONU的数据,如何保证数据安全?

【答案】:ONU主动过滤,同时数据有加密。

【解析】:一方面,ONU会根据相应的过滤条件主动过滤属于自己的数据,如通过ONU ID(GEM-PORT ID)过滤接收属于自己的数据;另一方面,OLT给每个ONU发送的数据会进行加密(如GPON的AES-128),且加密的密钥是由每个ONU产生并发给OLT的,ONU不会知道其他ONU的密钥,故也难解密属于其他ONU的数据。

动图封面

PON上行为何采用TDMA的方式传输数据呢?

【答案】:实现多ONU同时传输数据,公平竞争。

【解析】:PON的上行方向跟下行方向是反的,即指ONU到OLT的方向,这个方向发端与收端的数量对比关系是“多对一”的关系。既然是“多对一”的关系,肯定就不能让每个ONU想当然的发送数据了,否则就会存在同波长光信号叠加(如GPON的1310nm),OLT接收后也无法读取数据,出现误码帧或未知帧提示,并将其丢弃。

所以这种情况就必须要有一种仲裁机制,来保护我们的上行数据传输不发生冲突。这个仲裁机制便是TDMA,它将上行链路分成不同的时隙,再将这些时隙根据需要分给不同的ONU,ONU在属于自己的时隙发送数据。

动图封面

因此,我们这里也看到,ONU的发光时间严格受OLT指定,它是不会主动发光的,也不会长时间发光的。一旦某个ONU主动发光了或者长时间发光了,这个ONU就是一个“流氓ONU”,会影响整个PON口下的业务。

视频切片加密后播放

最近网上大学想下载一个视频,但下载下来的ts文件不能播放,把m3u8文件下载下来一看里面有

#EXT-X-KEY:METHOD=AES-128,URI="https://kc.zhixueyun.com/hls/9fd5d229-3b75-11e7-b669-44a84230d603",IV=0xd9221589c954ff5538bdc9af225e3e9e

里面的EXT-X-KEY:METHOD=AES-128说明服务器方在把文件切片成ts文件然后播放时进行了加密,所以我们先把m3u8这个文件下载下来,看有多少个ts文件,然后要把uri这个文件和所有ts文件下载下来(迅雷批量下载)放一个文件夹,把上面文件中的uri地址改成本地地址,用迅雷影音就可以直接打开m3u8文件播放。

一般hls视频流加密我们用到常见的一种是防盗链(严格来讲这不属于加密) , 也就是说给 m3u8 和 ts 文件的url动态生成一个 token , 比如这个:

http://www.cuplayer.com/m3u8/hunan/desc.m3u8?stream_id=hunan<m=1410595018&lkey=8bc1e0fe35f6321ef560f8ccffb70e5d&path=59.49.42.14,58.59.3.9,58.59.3.51&platid=10&splatid=1015&tag=live&cips=127.0.0.1&ext=m3u8&sign=live_tv

这个url是随着很多参数动态变化的,比如时间,用户id、ip地址,内容id , 导致你无法使用这个url盗链,这种方式可以防止其他网站直接使用你的url来观看或者一般用户的下载。

而ts文件的url 也需要加请求token , 会变化成类似 http://server/file.ts?token=xxxx 的方式, 这样的话, ts文件的磁盘存储位置不用变化,但是url是可以变化的(可以用query string方式,也可以用 url rewrite 方式), 注意因为url是m3u8生成的,意味着m3u8文件是动态生成而并非静态文件

另一种就是我上面说的DRM加密,用来给ts内容加密, m3u8有这个tag: #EXT-X-KEY

下面是网上找的如何把一个mp4视频使用ffmpeg视频切片并加密和视频AES-128加密后播放

创建加密文件:将一个mp4视频文件切割为多个ts片段,并在切割过程中对每一个片段使用AES-128 加密,最后生成一个m3u8的视频索引文件;

1.加密用的key(文件则保存当前目录)

指令:openssl rand -base64 20 > enc.key

提示打开文件本次生成的 n4DHLx7kMPeewvW3dGlm5i/EE8I=

2.另一个是iv(生成一段字符串,记下来):

指令:openssl rand -hex 16

提示打印出本次生成的682f5033538cf71567e1bdb38f5f9a07

新建一个文件enc.keyinfo 内容格式如下:
Key URI # enc.key的路径,使用http形式
Path to key file # enc.key文件
IV # 上面生成的iv

实例:
http://edu.gamagou.cn/enc.key
/usr/share/nginx/html/enc.key
682f5033538cf71567e1bdb38f5f9a07

  1. ffmpeg加密指令:

/home/programs/video/ffmpeg/ffmpeg -y -i /home/programs/video/test/123.mp4 -hls_time 12 -hls_key_info_file /home/programs/video/conf/enc.keyinfo -hls_playlist_type vod -hls_segment_filename “file%d.ts” playlist.m3u8

加密后的文件形式:

EXTM3U
EXT-X-VERSION:3
EXT-X-TARGETDURATION:12
EXT-X-MEDIA-SEQUENCE:0
EXT-X-PLAYLIST-TYPE:VOD
EXT-X-KEY:METHOD=AES-128,URI=”https://edu.amin.cc/enc.key”,IV=0x15de9b7283a69d7ef11f6f12e488fbb7
EXTINF:12.040000,

file0.ts

EXTINF:10.440000,

file1.ts

EXT-X-ENDLIST
  1. 播放部分:
    jq控件:hls.js
    手册:https://www.bootcdn.cn/hls.js/readme/

播放页面:

<script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script>
<!-- Or if you want a more recent canary version -->
<!-- <script src="https://cdn.jsdelivr.net/npm/hls.js@canary"></script> -->
<video id="video"></video>
<script>
  var video = document.getElementById('video');
  if(Hls.isSupported()) {
    var hls = new Hls();
    hls.loadSource('https://替换你的文件路径.m3u8');
    hls.attachMedia(video);
    hls.on(Hls.Events.MANIFEST_PARSED,function() {
      video.play();
  });
 } else if (video.canPlayType('application/vnd.apple.mpegurl')) {
    video.src = 'https://替换你的文件路径.m3u8';
    video.addEventListener('loadedmetadata',function() {
      video.play();
    });
  }
</script>

完成。