文章261
标签214
分类4

Anki安卓客户端提示java.net.UnknownServiceException: CLEARTEXT

上周更新了anki安卓版客户端后,自建的anki同步服务器就不能用了,由于前段时间较忙,没来得及处理,今天终于有空了,于是搞起。 用非大陆服务器的可以直接跳到三、解决问题章节。

一、找原因

image-20200525214851009

提示 明文传输的问题,由于自建的anki同步服务器默认使用http导致出现如图中的提示

java.net.UnknownServiceException: 
CLEARTEXT communication to xxx.xxx.xxx not permitted by network security policy

原因是:

为保证用户数据和设备的安全,Google针对下一代 Android 系统(Android P) 的应用程序,将要求默认使用加密连接,这意味着 Android P 将禁止 App 使用所有未加密的连接,因此运行 Android P 系统的安卓设备无论是接收或者发送流量,未来都不能明码传输,需要使用下一代(Transport Layer Security)传输层安全协议,而 Android Nougat 和 Oreo 则不受影响。

    在Android P系统的设备上,如果应用使用的是非加密的明文流量的http网络请求,则会导致该应用无法进行网络请求,https则不会受影响,同样地,如果应用嵌套了webview,webview也只能使用https请求。

二、开始折腾

image-20200525214719522

由于是是用的国内服务器,手上又没有备案的域名,于是使用了尝试使用了自签名的证书,但是还是有问题,提示SSLException while building HttpClient

意思大概就是说 请求ssl出错,原因是没有使用受信任的证书,于是想了一个办法就是,利用一台HK的服务器做中转,nginx反向代理即可。

image-20200525214710018

三、解决问题

由于是HK服务器不用备案,我直接使用了 Let's Encrypt的免费证书,新建一个Nginx配置文件

,使用Nginx反向代理配置内容如下(仅供参考,以你实际情况为准),xxx.com改成你的域名地址,证书路径改成你申请的证书路径即可, proxy_pass http://ip:27701; 这行该成你现在的anki服务器地址.

server
{
  listen 443 ssl http2;
  server_name xxx.com;
  location / {
    client_max_body_size 0;
    proxy_pass http://ip:27701;
    }
    #SSL-START
    ssl_certificate    /www/server/xxx/fullchain.pem;
    ssl_certificate_key    /www/server/xxx/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    error_page 497  https://$host$request_uri;

    #SSL-END
    access_log  /www/wwwlogs/xxx.log;
    error_log  /www/wwwlogs/xxx.error.log;
}

四、测试效果

在anki安卓客户端,自定义服务器地址改成 现在的代理的地址:https开头的

image-20200525221145392

成功同步。

image-20200525221449355.png

宜しくお願い致します!

nc命令常见用法

简介

nc是netcat的简写,有着网络界的瑞士军刀美誉。因为它短小精悍、功能实用,被设计为一个简单、可靠的网络工具

功能

  • 端口扫描
  • 实现任意TCP/UDP端口的监听
  • 远程拷贝文件
  • ......

    参数

-g<网关> 设置路由器跃程通信网关,最多可设置8个。
-G<指向器数目> 设置来源路由指向器,其数值为4的倍数。
-h 在线帮助。
-i<延迟秒数> 设置时间间隔,以便传送信息及扫描通信端口。
-l 使用监听模式,管控传入的资料。
-n 直接使用IP地址,而不通过域名服务器。
-o<输出文件> 指定文件名称,把往来传输的数据以16进制字码倾倒成该文件保存。
-p<通信端口> 设置本地主机使用的通信端口。
-r 乱数指定本地与远端主机的通信端口。
-s<来源位址> 设置本地主机送出数据包的IP地址。
-u 使用UDP传输协议。
-v 显示指令执行过程。
-w<超时秒数> 设置等待连线的时间。
-z 使用0输入/输出模式,只在扫描通信端口时使用。

示例

这里我主要用到的功能就是端口监听跟端口扫描

端口监听

nc -lv 888
20200520230453.png

端口扫描

nc -vz -w 1 192.168.3.1 80
或者多个端口扫描
nc -vz -w 1 192.168.3.1 443-445

20200520230028.png

Xenu:一款轻量强大的网站死链检测工具

Xenu Link Sleuth 也许是你所见过的最小但功能最强大的检查网站死链接的软件了。你可以打开一个本地网页文件来检查它的链接,也可以输入任何网址来检查。它可以分别列出网站 的活链接以及死链接,连转向链接它都分析得一清二楚;支持多线程 ,可以把检查结果存储成文本文件或网页文件。

下载链接:http://home.snafu.de/tilman/XENU.ZIP

使用方法

点击下载后,进行安装,安装完界面如下:
1038893491
点击File--Check URL
20200516000601.png

根据界面的右下角查看进度,完成后,默认导出html格式的报告,也可以根据需要导出需要的报告,点击Options-preferences-Reports 设置即可
1038893491
1038893491

VMware Workstation Pro 15官方版本及永久许可证密钥

typora导出word格式安装pandoc的一些问题

typora导出word格式提示需要安装pandoc,安装完成后需要重新安装typora 才能正常使用导出word格式

Linux 查看当前运行级别

init是Linux系统操作中不可缺少的程序之一。init进程,它是一个由内核启动的用户级进程。内核会在过去曾使用过init的几个地方查找它,它的正确位置(对Linux系统来说)是/sbin/init。如果内核找不到init,它就会试着运行/bin/sh,如果运行失败,系统的启动也会失败。
Linux系统7个运行级别(0:关机,停机模式、1:单用户模式、2:多用户模式、3:完整的多用户文本模式、4:系统未使用,保留一般不用、5:图形化模式、6:重启模式),运行级就是操作系统当前正在运行的功能级别。这个级别从0到6 ,具有不同的功能。
级别具体说明:
0: 系统停机(关机)模式,系统默认运行级别不能设置为0,否则不能正常启动,一开机就自动关机。
1:单用户模式,root权限,用于系统维护,禁止远程登陆,就像Windows下的安全模式登录。
2:多用户模式,没有NFS网络支持。
3:完整的多用户文本模式,有NFS,登陆后进入控制台命令行模式。
4:系统未使用,保留一般不用,在一些特殊情况下可以用它来做一些事情。例如在笔记本电脑的电池用尽时,可以切换到这个模式来做一些设置。
5:图形化模式,登陆后进入图形GUI模式或GNOME、KDE图形化界面,如X Window系统。
6:重启模式,默认运行级别不能设为6,否则不能正常启动,就会一直开机重启开机重启。

如何查看当前的运行级别

使用命令 runlevel 或者 who -r 还有其他的就不具体深入了
20200510105614.png