ARTS-WEEK4

Posted by 周思进 on June 21, 2020

Algorithm

LeetCode-13 罗马数字转整数

class Solution:
    '''
    罗马数字正常情况是小的数字在大的数字右边,所以如果出现小的数字在大的数字前面,就是要减去这个小的数字
    '''
    def romanToInt(self, s: str) -> int:
        d = {'I':1, 'V':5, 'X':10, 'L':50, 'C':100, 'D':500, 'M':1000}
        sum = 0
        for i in range(len(s)-1):
            if d[s[i]] < d[s[i+1]]:
                sum -= d[s[i]]
            else:
                sum += d[s[i]]

        sum += d[s[len(s) - 1]]
        return sum


Review

Is 4G DDNS Possible?

substantial: 本质的
residential: 住所的
consistent: 一致的
integral:构成整体所必须的
rural:乡村的
typically: 通常的
periodically: 周期性的
illustration: 插图

本文说明了 DDNS 功能对于 4G 网络和家用网络的区别。

先讲解了 DDNS 工作原理,首先了解了家用网络的外部 IP 和实际的外网访问是一对一的关系,访问这个外部 IP 即明确是与拥有这个外部 IP 的实体进行通信,不过这个外部 IP 除非是向运营商申请的静态 IP,否则都是动态申请随时可能变动的,如果你想一直与固定端通信,通过 IP 指定则非常麻烦,你需要清楚知道对端当前的 IP 是说明。

而 DDNS 客户端通过周期性检测外部 IP,并将外部 IP 和用户申请的域名地址一同上报给 DNS 主机,用户通过访问域名地址来访问设备,这样无论外部 IP 怎么变更,域名都会解析成实际的 IP 地址。

4G 网络和家用网络的不同在于 4G 网络所拥有的 IP 都是私有 IP, 全部在基站这个实际的外部 IP 下面,不像家用网络的外部 IP 和 实际外网访问存在一对一的关系。

DDNS 上报外部 IP 可能上报的是基站这个外部 IP,但访问这个 IP, 基站是没法知道是要访问这个基站下面的哪台设备,而如果是上传的 4G 设备所拥有的私有 IP,则更加不能访问到了。

目前看来 4G 网络下无法直接使用 DDNS 服务。


Tip

在进行 brew install 安装软件的时候,提示
Updating Homebrew…
会卡很久很久

通过搜索了解有如下几种解决方法:
1、直接按 ctrl + c,停止更新,接着继续进行安装操作
2、关闭每次执行 brew 命令的自动更新,在 ~/.bash_profile 文件增加如下语句

export HOMEBREW_NO_AUTO_UPDATE=true

3、替换 brew 源


Share

UPnP SUBSCRIBE 漏洞 CVE-2020-12695 处理

UPnP 功能可用于局域网内的设备彼此发现和交互,还可以向路由器申请端口映射,便于不同网之间的设备访问。

近期爆出的 UPnP CVE-2020-12695 漏洞描攻击者可以滥用 UPnP SUBSCRIBE 功能将流量发送到任意目的地。

目前提供的处理意见:
1、禁用 UPnP 功能或者默认关闭 UPnP
2、禁用 UPnP SUBSCRIBE 功能
3、如果要用 UPnP SUBSCRIBE 功能,限制在可信任的局域网内

相关漏洞说明都会提示可通过 CallStranger 工具来检测设备是否受此漏洞影响。

如果你的系统有 curl 命令工具,那可以直接通过如下命令方式来测试(curl工具真是太强大了~)

curl -v http://192.168.1.100:49152  -H "CALLBACK: <http://192.168.1.101:80>" -H "NT: upnp:event" -H "TIMEOUT: Second-1800" -X SUBSCRIBE

如果你的 UPnP 功能是开启的,也没做过裁剪,那基本是受影响的,通过上述命令测试,加加打印可以定位到 SUBSCRIBE 回调处理由 UpnpRegisterRootDevice 接口函数注册的 TvDeviceCallbackEventHandler 函数里处理。

如果想禁用 SUBSCRIBE 功能,则忽略对 UPNP_EVENT_SUBSCRIPTION_REQUEST 处理即可。