月度归档:2022年03月

配置基于IPv6优先的Shadowsocks-libev,可供流量落地,解锁流媒体的需求 2022-3-27

需求描述:

配置SS,基本是用于接入层,或者落地层,满足接入层的客户端轻量化,满足落地层的简单化。

其他相关Dasmz的文章

000079. 基于sjlleo的netflix-verify,检测VPS服务器IP地址或节点IP是否支持Netflix流媒体 2022-2-28 检测节点的IPv6是否可用于Netflix流媒体,实际呢,检测脚本相对滞后,大家还是需要根据部署后,实际用落地进行播放来验证。 https://dasmz.com/?p=1522

000081. 基于双栈服务器的原生IPv6地址,解锁当地Netflix HBO等流媒体 2022-03-03 这篇是用V2ray配置IPv6出站,配置参数,对于普通人而言,比较复杂。 https://dasmz.com/?p=1583

Debian/Ubuntu安装

apt-get update
apt-get install shadowsocks-libev

修改服务器上的配置文件 /etc/shadowsocks-libev/config.json,配置IPv6和IPv4的Shadowsocks,这样双栈的服务端。

{
    "server":["[::0]", "0.0.0.0"],
    "server_port":12345,
    "local_port":1080,
    "password":"Pe611AbD",
    "timeout":60,
    "method":"aes-128-cfb",
    "nameserver":"1.1.1.1",
    "mode":"tcp_only",
    "ipv6_first": true
}
参数释义
{
    "server":["[::0]", "0.0.0.0"], // 服务器的监听地址,这里是IPv4/IPv6双栈
    "server_port":12345,    // 服务器的监听端口
    "local_port":1080,      // 
    "password":"Pe611AbD",  // 密码
    "timeout":60,           // 超时的时间,秒
    "method":"aes-128-cfb", // 加密算法
    "nameserver":"1.1.1.1", // 默认的DNS服务器,可选参数
    "mode":"tcp_only",      // 工作模式,我这里限制它为TCP,可选参数
    "ipv6_first": true      // 是否IPv6优先,本次落地场景必须加上
}
修改配置文件后,重启服务,即可生效

systemctl restart shadowsocks-libev

基于上面这个配置参数,双栈入站,IPv6出站优先的策略,可以解锁很多的流媒体站点。

000087. 配置基于IPv6优先的Shadowsocks-libev,可供流量落地,解锁流媒体的需求 2022-3-27

本期博客地址 https://dasmz.com/?p=1804
本期视频地址 https://youtu.be/7a2ccbHsUhY

Firefox,火狐浏览器,安装adblock或ublock广告拦截插件的问题 2022-3-21

段落1、需求描述

国内地区,使用火狐浏览器,装adblock或ublock广告拦截插件的问题

段落2、版本问题,本次会用国际版本作为示例

这里还有一个延伸的问题,火狐有一个常规的国际版本,和一个本地化的国内版本,两个版本数据是不通的。

区别如下

国际版本火狐是由 Mozilla 基金会 维护的

中国版本火狐是由 北京谋智火狐信息技术有限公司 维护的
国内版本,因某些原因,会有访问内容过滤,而且有广告
国内版火狐打开后会是一个类似hao123网页导航样式的页面

国际版火狐打开后显示的是一个搜索框和最近历史。
国内版 https://www.firefox.com.cn/
国际版 https://www.mozilla.org/en-US/firefox/new/

国际版本,在国内,下载速度较慢,需较好的网络环境,下载在线安装包,或者提前下载好离线安装包:

https://www.mozilla.org/en-US/firefox/all/#product-desktop-release

区别很好看出来

国内版的账号叫火狐通行证,国际版的叫Firefox Sync

段落3、无法安装adblock或ublock广告拦截插件的问题

在安装此类广告拦截插件的时候,提示在您所在的地区不可用

图像

根据网络消息,可能与法律诉讼

新闻链接:

截图存档,防源删,侵权可联系。

段落4、安装ublock/adblock插件

Firefox目前是根据GeoIP的IP地址数据库,屏蔽了中国IP地址下载这类广告拦截插件。

解决办法很简单,开启代理,只要不是CN地区的IP地址,可轻松下载。

苹果iOS,Shadowrocket进阶,基于小火箭自定义规则,配置广告拦截或者IP拦截 20220317

场景描述

在苹果手机,safari打开某小说网站时候,出现较多的广告,而且都是用色情的动图方式引流的广告链接

需求就很简单,把这些乱七八糟的广告屏蔽即可,这里使用的工具就是shadowrocket

实施操作步骤

1、打开Shadowrocket,打开下发菜单的第三个“数据”,打开末尾的”自动删除”,”代理”,”DNS”三个选项的开关

2、打开”首页”,全局路由那里选择默认的”配置”,选择某个节点连接

3、打开safari浏览器,发送小说网站的请求,在[数据/代理]最新的日志中,根据时间线,查看对应的广告域名。

4、打开[配置/default.conf右侧/规则/加号],进行广告域名屏蔽。

广告域名屏蔽的方式一般为

大广告联盟的域名,一般匹配到domain-对应子域名

小广告链接,一般屏蔽它的整个域名后缀domain-suffix/domainname

添加屏蔽后,规则是热加载的,不用重启节点,直接去浏览器刷新页面即可。

附录1、说明

视频教程中的网站,最后折腾我许久的那个广告图片,它的链接是
https://m.bige3.com/images/bfq/07.gif
这个动图确实是在其主站服务器上,无法通过简单的域名进行屏蔽。
可以点击图片下发的"点击关闭阅读广告"即可关闭。
这个网站相对比较良心,支持关闭广告。给其站长233个赞!

附录2、说明

一般,不是太确定的域名,不要用domain-suffix进行屏蔽,杀伤范围太大,容易造成错误。

视频

基于aircrack-ng跑无线信号WIFI的握手包密码,可无需字典文件 2022-3-16

段落1、需求描述

跑包,可选密码,或者自定义密码,或者无字典文件,用随机字符串

段落2、部署安装

apt-get update
apt-get install aircrack-ng cpulimit screen crunch

段落3、生成字典

根据实际的需求,自己生成字典文件,下面是8位的数字的字典,大约860MB

#!/usr/bin/python3
# 从00000000 - 99999999的字典,一共1千万个记录,文件大小约为860MB
d = '/root/DICT_8_DIGITAL.txt'
end = 100000000
with open(d,'w') as f:
    for i in range(0,end):
        f.write("%08d\n" % i)

可以发现,其实密码字典,还是很大的,如果要全部生成,很不划算,占用磁盘空间很多

段落4、开启跑包

screen -dmS SAirCrack aircrack-ng -w ./DICT_8_DIGITAL.txt -b B8:AA:08:10:D1:AA WPA_cap-01.cap

段落5、开始CPU限制

查找进程号
ps -ef | grep aircrack-ng

发现进程号
83623

开启CPU利用限制
screen -dmS SCPULimit cpulimit --pid 83623 --limit 60 

段落6、无字典,随机字符跑包

用crunch,命令大概如下

crunch 8 15 qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890 | aircrack-ng WPA_cap-01.cap -b B8:AA:08:10:D1:AA -w-

由于自己把跑包,放在云服务器上面,性能限制,速度慢很多,还是推荐用显卡跑,或者现代一点的,根据万能钥匙匹配。

随机8位[0-9a-zA-Z]字符的总数为62的8次方个组合,共计 218340105584896

假设碰撞速度为 180000,显卡运算,最大需要38.46年,才能碰撞到密码

>>> 218340105584896 / 180000 / 3600 / 24 / 365
38.46

000088. 基于aircrack-ng跑无线信号WIFI的握手包密码,可无需字典文件 2022-4-1

本期博客地址 https://dasmz.com/?p=1749
本期视频地址 https://youtu.be/xFrSVniOJkQ

配置haproxy负载均衡,落地到多socks4/socks5场景的配置 2022-3-16

段落1、需求描述

从网络上采集到很多个socks4/socks5透明代理,需要设置一个负载均衡,让流量走他们自动负载。

段落2、负载均衡haproxy是一个优秀的选项,本次就用它了

段落3、实施部署

服务器Backend1 开启一个socks5,命令如下
screen -dmS tmpS5 /root/gost-linux-amd64-2.11.1 -L=socks5://socks自定义用户名:socks自定义密码@0.0.0.0:16803

公网可用 socks5://socks自定义用户名:socks自定义密码@服务器Back1st的IP地址:16803
服务器Backend2 开启一个socks5,命令如下
screen -dmS tmpS5 /root/gost-linux-amd64-2.11.1 -L=socks5://socks自定义用户名:socks自定义密码@0.0.0.0:6403

公网可用 socks5://socks自定义用户名:socks自定义密码@服务器Back2ed的IP地址:6403

段落4、Ubuntu 20.04系统环境,安装部署haproxy

apt-get update
apt-get install haproxy

版本信息 haproxy -v
HA-Proxy version 2.0.13-2ubuntu0.5 2022/03/02

配置文件 /etc/haproxy/haproxy.cfg
服务名称 haproxy.service
检查配置文件语法 haproxy -c -f /etc/haproxy/haproxy.cfg
重启服务 systemctl restart haproxy
参数
* global 全局参数设置
* defaults 默认参数设置
* log 日志
* mode 工作模式,可选http tcp
* option 可选参数,如httplog forwardfor-记录客户端真实的IP httpclose-完成后主动关闭此TCP连接 dontlognull
* timeout connect 连接超时选项,成功连接到一台服务器的最长等待时间,默认单位是毫秒
* timeout client 连接超时选项,连接客户端发送数据时最长等待时间,默认单位是毫秒
* timeout server 连接超时选项,服务器端回应客户端数据发送的最长等待时间,默认单位是毫秒
* timeout check 连接超时选项,设置对后端服务器的检测超时时间,默认单位是毫秒
* frontend 入口
* backend 出口
* maxconn 可接受的最大并发连接数
* nbproc 在server服务端的haproxy进程数,建议根据小于等于CPU核心数设置
* daemon 后台模式,运行后会后台常驻
* user/group 启动的工作态的用户和组
* pidfile 进程pid位置
* balance 支持的负载均衡算法
roundrobin 基于权重进行轮叫调度的算法
static-rr 基于权重进行轮叫调度的算法,不过此算法为静态算法
source 基于请求源IP的算法。此算法先对请求的源IP进行HASH运算,然后将结果与后端服务器的权重总数相除后转发至某台匹配的后端服务器。这种方式可以使同一个客户端IP的请求始终转发到某特定的后端服务器
leastconn 此算法会将新的连接请求转发到具有最少连接数目的后端服务器。在会话时间较长的场景中推荐使用此算法
uri 此算法会对部分或整个URI进行HASH运算,再经过与服务器的总权重相除,最后转发到某台匹配的后端服务器上
uri_param 此算法会根据URL路径中的参数进行转发,这样可保证在后端真实服务器数据不变时,同一个用户的请求始终分发到同一台机器上
hdr 此算法根据HTTP头进行转发,如果指定的HTTP头名称不存在,则使用roundrobin算法 进行策略转发

后端的param参数
常用的参数:
check 表示启用对此后端服务器执行健康状态检查
inter 设置健康状态检查的时间间隔,单位是毫秒
rise 检查多少次认为服务器可用
fall 检查多少次认为服务器不可用
weight 设置服务器的权重,默认为1, 最大为256。 设置为0表示不参与负载均衡
backup 设置备份服务器,用于所有后端服务器全部不可用时
cookie 为指定的后端服务器设置cookie值,此处指定的值将在请求入站时被检查,第一次为此值挑选的后端服务器将在后续的请求中一直被选中,其目的在于实现持久连接的功能
参考的一个配置
defaults
        log global
        mode    tcp
        option  tcplog
        timeout connect  60000
        timeout client  120000
        timeout server  120000


frontend roubin_socks5_listen
        mode    tcp
        bind    *:31111
        default_backend roubin_socks5_outbound

backend roubin_socks5_outbound
        mode    tcp
        balance roundrobin
        server server1 服务器Back1st的IP地址:16803 check inter 8000 rise 2 fall 3 maxconn 512
        server server2 服务器Back2ed的IP地址:6403 check inter 8000 rise 2 fall 3 maxconn 512

段落5、验证可用

proxychains4 curl http://ip.sb

附录1、可选,增加统计页面

listen stats
        mode http
        bind 0.0.0.0:8888
        stats refresh 30s
        stats enable
        stats uri     /stats 
        stats auth    haproxy:2fCb2a0Ea3d15E9a


可以通过 http://你服务器的IP地址:8888/stats访问

— 2022-3-23 更新

用代码从数据库中提取可用的socks4/socks5节点,添加到haproxy配置文件中

多socks4/socks5的场景

统计页面的显示

这样,自己只需要连接 haproxy生成的 roubin_inbound入口端口即可,后端差错控制由haproxy负责,棒!

苹果手机和平板的shadowrocket客户端的Relay协议节点配置 2022-3-14

需求

手里有一个通用节点池,就是http/https/socks4/socks5的代理集,从中找到一个速度比较快的,正好用来配置Relay协议

说明

Shadowrocket客户端,支持多种协议,可以任意协议的进行中转和落地,本文视频只示范了一个协议的链条,实际可以跨协议的链

清单

1、 入口服务器,浙江宁波的socks5://210.83.*.4:10808,它的落地在日本linode的 172.104.*.*,这个是来自通用代理池

2、落地服务器,新加坡的OVZ便宜服务器,这个是自有的,用Gost配置了一个带用户名/密码的socks5

配置实施、Shadowrocket配置

1、常规添加入口服务器的socks5

2、常规添加落地服务器的socks5

3、点击落地服务器的右侧的圈i小标记,点击转发,选择入口服务器

完成后的样子,选择落地节点,直接连接即可。

视频

私有化部署自己的IP地理位置数据库 2022-3-14

需求

各类公网的数据库,都限制了请求频次,有时候,自己需要批量的查询需求,得不到满足,于是,有了,自己掌握数据,自己搭建可供查询服务的需求

清单

1、数据库

2、基于Flask的API接口模块

配置清单

1、主程序文件

#!/usr/bin/python3
# -*- coding: utf-8 -*-
# Dasmz
# 2022-3-14

import datetime
import time
import flask
import ipaddress
import sqlite3

import ISO_3166_1

myDB = '这里是数据库的文件路径'

def getNow():
    return datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    

def IPIsValid(vIPv4):
    try:
        vBLACKIPs = ['8.8.8.8', '1.1.1.1','0.0.0.0','255.255.255.255','192.168.1.1','1.0.0.0','6.6.6.6']
        if ipaddress.IPv4Address(vIPv4) != ipaddress.IPv4Address('127.0.0.1') and vIPv4 not in vBLACKIPs:
            return 'Y'
        else:
            return 'N'
    except Exception as e:
        print(e)
        print('Tracker.Error.82aE9F6a40E38E40.IPIsValid')
        return 'N' 

def getIPNetwork(aIPv4):
    x = aIPv4.split('.')
    x[3] = '0'
    return '.'.join(x)

def getIPRangeNetwork(aIPv4):
    x = aIPv4.split('.')
    return ["%s.%s.%d.0" % (x[0],x[1],i) for i in range(0,256)]

def runSelectSQL(aDB, aSQL):
    '''
    RETURN LIST
    '''
    try:
        conn = sqlite3.connect(aDB)
        csr = conn.cursor()
        csr.execute(aSQL)
        vData = csr.fetchall()
        conn.close()
        return vData     
    except Exception as e:
        print("Tracker.Error.82aE9F6a40E38E40.runSelectSQL")
        print(e)
        return []
    finally:
        conn.close() 

def procedureIP(aIPv4):
    try:
        vIP  = getIPNetwork(aIPv4 = aIPv4)    # 202.23.99.44 -> 202.23.99.0
        vSQL = "select location from ip where ip = '%s';" % vIP
        print(" + SQL: %s" % vSQL)
        vData = runSelectSQL(aDB = myDB, aSQL = vSQL)
        if vData[0][0]:
            if vData[0][0].startswith('CN-'):
                return vData[0][0].split()[0].replace('CN-','')
            else:
                return getCountryZHName(vData[0][0].split()[0])
        else:
            return '404'
    except Exception as e:
        print("Tracker.Error.aCCbfEAaCcfEBCD7.procedureIP")
        print(e)
        print("\n('%s','NotFoundTag')," % (vIP))
        return '404'

def procedureIP_full(aIPv4):
    try:
        vIP  = getIPNetwork(aIPv4 = aIPv4)    # 202.23.99.44 -> 202.23.99.0
        vSQL = "select location from ip where ip = '%s';" % vIP
        print(" + SQL: %s" % vSQL)
        vData = runSelectSQL(aDB = myDB, aSQL = vSQL)
        if vData[0][0]:
            return vData[0][0]
        else:
            return '404'
    except Exception as e:
        print("Tracker.Error.aCCbfEAaCcfEBCD7.procedureIP")
        print(e)
        print("\n('%s','NotFoundTag')," % (vIP))
        return '404'


def getCountryZHName(char2code):
    try:
        return ISO_3166_1.iso_3166_1.get(char2code)
    except Exception as e:
        print("Tracker.Error.D1b808762AC4dCAA.getCountryZHName")
        print(e)
        return '未知-%s' % char2code




app = flask.Flask(__name__)

@app.route('/ipservice', methods=['GET'])
def ipservice():
    try:
        aIP = flask.request.args.get("ip")
        aIPOK = IPIsValid(vIPv4 = aIP)
        if aIPOK == 'Y':
            print("\n\n\n + Target IP Address: %s" % aIP)
            vData = procedureIP(aIPv4 = aIP)
            return vData
        else:
            return '404'
    except Exception as e:
        print("Tracker.Error.67daA1cB92BBBafc.ipmsg")
        print(e)
        return '404'

@app.route('/ipservicefull', methods=['GET'])
def ipservicefull():
    try:
        aIP = flask.request.args.get("ip")
        aIPOK = IPIsValid(vIPv4 = aIP)
        if aIPOK == 'Y':
            print("\n\n\n + Target IP Address: %s" % aIP)
            vData = procedureIP_full(aIPv4 = aIP)
            return vData
        else:
            return '404'
    except Exception as e:
        print("Tracker.Error.67daA1cB92BBBafc.ipmsg")
        print(e)
        return '404'


if __name__ == "__main__":
    app.run(host='0.0.0.0',port=18040)
ISO标准国家地区代码文件 ISO_3166_1.py 主要就是一个对照关系的字典,增加了一个UK英国,自己习惯用UK表示英国,这个GB才是其非标准定义。

iso_3166_1 = {
"AX":"奥兰群岛",
"AL":"阿尔巴尼亚",
"DZ":"阿尔及利亚",
"AS":"美属萨摩亚",
"AD":"安道尔",
"AO":"安哥拉",
"AI":"安圭拉",
"AQ":"南极洲",
"AG":"安提瓜和巴布达",
"AR":"阿根廷",
"AM":"亚美尼亚",
"AW":"阿鲁巴",
"AU":"澳大利亚",
"AT":"奥地利",
"AZ":"阿塞拜疆",
"BS":"巴哈马",
"BH":"巴林",
"BD":"孟加拉国",
"BB":"巴巴多斯",
"BY":"白俄罗斯",
"BE":"比利时",
"BZ":"伯利兹",
"BJ":"贝宁",
"BM":"百慕大",
"BT":"不丹",
"BO":"玻利维亚",
"BA":"波黑",
"BW":"博茨瓦纳",
"BV":"布维岛",
"BR":"巴西",
"IO":"英属印度洋领地",
"BN":"文莱",
"BG":"保加利亚",
"BF":"布基纳法索",
"BI":"布隆迪",
"KH":"柬埔寨",
"CM":"喀麦隆",
"CA":"加拿大",
"CV":"佛得角",
"KY":"开曼群岛",
"CF":"中非",
"TD":"乍得",
"CL":"智利",
"CN":"中国",
"CX":"圣诞岛",
"CC":"科科斯群岛",
"CO":"哥伦比亚",
"KM":"科摩罗",
"CG":"刚果布",
"CD":"刚果金",
"CK":"库克群岛",
"CR":"哥斯达黎加",
"CI":"科特迪瓦",
"HR":"克罗地亚",
"CU":"古巴",
"CY":"塞浦路斯",
"CZ":"捷克",
"DK":"丹麦",
"DJ":"吉布提",
"DM":"多米尼克",
"DO":"多米尼加",
"EC":"厄瓜多尔",
"EG":"埃及",
"SV":"萨尔瓦多",
"GQ":"赤道几内亚",
"ER":"厄立特里亚",
"EE":"爱沙尼亚",
"ET":"埃塞俄比亚",
"FK":"福克兰群岛",
"FO":"法罗群岛",
"FJ":"斐济",
"FI":"芬兰",
"FR":"法国",
"GF":"法属圭亚那",
"PF":"法属波利尼西亚",
"TF":"法属南部领地",
"GA":"加蓬",
"GM":"冈比亚",
"GE":"格鲁吉亚",
"DE":"德国",
"GH":"加纳",
"GI":"直布罗陀",
"GR":"希腊",
"GL":"格陵兰",
"GD":"格林纳达",
"GP":"瓜德罗普",
"GU":"关岛",
"GT":"危地马拉",
"GG":"格恩西岛",
"GN":"几内亚",
"GW":"几内亚比绍",
"GY":"圭亚那",
"HT":"海地",
"HM":"赫德岛和麦克唐纳岛",
"VA":"梵蒂冈",
"HN":"洪都拉斯",
"HK":"中国香港",
"HU":"匈牙利",
"IS":"冰岛",
"IN":"印度",
"ID":"印度尼西亚",
"IR":"伊朗",
"IQ":"伊拉克",
"IE":"爱尔兰",
"IM":"英国属地曼岛",
"IL":"以色列",
"IT":"意大利",
"JM":"牙买加",
"JP":"日本",
"JE":"泽西岛",
"JO":"约旦",
"KZ":"哈萨克斯坦",
"KE":"肯尼亚",
"KI":"基里巴斯",
"KP":"朝鲜",
"KR":"韩国",
"KW":"科威特",
"KG":"吉尔吉斯斯坦",
"LA":"老挝",
"LV":"拉脱维亚",
"LB":"黎巴嫩",
"LS":"莱索托",
"LR":"利比里亚",
"LY":"利比亚",
"LI":"列支敦士登",
"LT":"立陶宛",
"LU":"卢森堡",
"MO":"中国澳门",
"MK":"前南马其顿",
"MG":"马达加斯加",
"MW":"马拉维",
"MY":"马来西亚",
"MV":"马尔代夫",
"ML":"马里",
"MT":"马耳他",
"MH":"马绍尔群岛",
"MQ":"马提尼克",
"MR":"毛利塔尼亚",
"MU":"毛里求斯",
"YT":"马约特",
"MX":"墨西哥",
"FM":"密克罗尼西亚联邦",
"MD":"摩尔多瓦",
"MC":"摩纳哥",
"MN":"蒙古",
"ME":"黑山",
"MS":"蒙特塞拉特",
"MA":"摩洛哥",
"MZ":"莫桑比克",
"MM":"缅甸",
"NA":"纳米比亚",
"NR":"瑙鲁",
"NP":"尼泊尔",
"NL":"荷兰",
"AN":"荷属安的列斯",
"NC":"新喀里多尼亚",
"NZ":"新西兰",
"NI":"尼加拉瓜",
"NE":"尼日尔",
"NG":"尼日利亚",
"NU":"纽埃",
"NF":"诺福克岛",
"MP":"北马里亚纳",
"NO":"挪威",
"OM":"阿曼",
"PK":"巴基斯坦",
"PW":"帕劳",
"PS":"巴勒斯坦",
"PA":"巴拿马",
"PG":"巴布亚新几内亚",
"PY":"巴拉圭",
"PE":"秘鲁",
"PH":"菲律宾",
"PN":"皮特凯恩",
"PL":"波兰",
"PT":"葡萄牙",
"PR":"波多黎各",
"QA":"卡塔尔",
"RE":"留尼汪",
"RO":"罗马尼亚",
"RU":"俄罗斯联邦",
"RW":"卢旺达",
"SH":"圣赫勒拿",
"KN":"圣基茨和尼维斯",
"LC":"圣卢西亚",
"PM":"圣皮埃尔和密克隆",
"VC":"圣文森特和格林纳丁斯",
"WS":"萨摩亚",
"SM":"圣马力诺",
"ST":"圣多美和普林西比",
"SA":"沙特阿拉伯",
"SN":"塞内加尔",
"RS":"塞尔维亚",
"SC":"塞舌尔",
"SL":"塞拉利昂",
"SG":"新加坡",
"SK":"斯洛伐克",
"SI":"斯洛文尼亚",
"SB":"所罗门群岛",
"SO":"索马里",
"ZA":"南非",
"GS":"南乔治亚岛和南桑德韦奇岛",
"ES":"西班牙",
"LK":"斯里兰卡",
"SD":"苏丹",
"SR":"苏里南",
"SJ":"斯瓦尔巴岛和扬马延岛",
"SZ":"斯威士兰",
"SE":"瑞典",
"CH":"瑞士",
"SY":"叙利亚",
"TW":"台湾",
"TJ":"塔吉克斯坦",
"TZ":"坦桑尼亚",
"TH":"泰国",
"TL":"东帝汶",
"TG":"多哥",
"TK":"托克劳",
"TO":"汤加",
"TT":"特立尼达和多巴哥",
"TN":"突尼斯",
"TR":"土耳其",
"TM":"土库曼斯坦",
"TC":"特克斯和凯科斯群岛",
"TV":"图瓦卢",
"UG":"乌干达",
"UA":"乌克兰",
"AE":"阿联酋",
"GB":"英国",
"US":"美国",
"UM":"美国本土外小岛屿",
"UY":"乌拉圭",
"UZ":"乌兹别克斯坦",
"VU":"瓦努阿图",
"VE":"委内瑞拉",
"VN":"越南",
"VG":"英属维尔京群岛",
"VI":"美属维尔京群岛",
"WF":"瓦利斯和富图纳",
"EH":"西撒哈拉",
"YE":"也门",
"YU":"南斯拉夫",
"ZM":"赞比亚",
"ZW":"津巴布韦",
"UK":"英国",
}

自用的API地址,不公开地址。

收集的一些IP地址信息的API地址 2022-3-14

需求描述

需要一些API地址,用来查询IP地址的归属国家/地区,查询IP地址的ISP信息,AS信息。

1、段落1,http://ip-api.com/YourSearchIP

获取其返回值的 countryCode as 字段的信息

curl http://ip-api.com/204.44.115.22
{
  "status"       : "success",
  "continent"    : "North America",
  "continentCode": "NA",
  "country"      : "United States",
  "countryCode"  : "US",
  "region"       : "TX",
  "regionName"   : "Texas",
  "city"         : "Dallas",
  "district"     : "",
  "zip"          : "75247",
  "lat"          : 32.8137,
  "lon"          : -96.8704,
  "timezone"     : "America/Chicago",
  "offset"       : -18000,
  "currency"     : "USD",
  "isp"          : "QuadraNet Enterprises LLC",
  "org"          : "Security Frame",
  "as"           : "AS8100 QuadraNet Enterprises LLC",
  "asname"       : "ASN-QUADRANET-GLOBAL",
  "mobile"       : false,
  "proxy"        : false,
  "hosting"      : true,
  "query"        : "204.44.115.22"
}

2. 段落2、http://ipinfo.io/YourSearchIP/geo

获取其返回值的 country org 字段的信息

curl http://ipinfo.io/204.44.115.22/geo

{
  "ip": "204.44.115.22",
  "hostname": "geek.gonetell.com",
  "city": "Dallas",
  "region": "Texas",
  "country": "US",
  "loc": "32.8152,-96.8703",
  "org": "AS8100 QuadraNet Enterprises LLC",
  "postal": "75247",
  "timezone": "America/Chicago",
  "readme": "https://ipinfo.io/missingauth"
}

3、段落3、https://ipapi.co/YourSearchIP/json

获取其返回值的 country_code asn org 字段的信息

curl https://ipapi.co/204.44.115.22/json
{
    "ip": "204.44.115.22",
    "version": "IPv4",
    "city": "Dallas",
    "region": "Texas",
    "region_code": "TX",
    "country": "US",
    "country_name": "United States",
    "country_code": "US",
    "country_code_iso3": "USA",
    "country_capital": "Washington",
    "country_tld": ".us",
    "continent_code": "NA",
    "in_eu": false,
    "postal": "75247",
    "latitude": 32.8137,
    "longitude": -96.8704,
    "timezone": "America/Chicago",
    "utc_offset": "-0500",
    "country_calling_code": "+1",
    "currency": "USD",
    "currency_name": "Dollar",
    "languages": "en-US,es-US,haw,fr",
    "country_area": 9629091.0,
    "country_population": 327167434,
    "asn": "AS8100",
    "org": "ASN-QUADRANET-GLOBAL"
}

全球最大的数字图书馆,Z-library,下载图书电子书 2022-3-12

需求

下载一些电子书PDF,供自己阅读,这个网站收录最多,可供下载的类型非常多。

网站地址

Z-library官网地址 https://zh.z-lib.org/

Z-libraray的维基信息地址 https://zh.wikipedia.org/wiki/Z-Library

可选,

1、无需注册,更换IP,进行下载文件

2、注册,登录,捐赠1美元,无限制下载

Debian / Ubuntu 的Linux安装使用openvpn3客户端 2022-03-08

段落1、需求

本地的环境是Debian / Ubuntu的Linux环境,需要安装openvpn3客户端,并连接到已有的服务端上。

客户端项目地址 https://github.com/OpenVPN/openvpn3-linux

段落2、openvpn3客户端安装

参考 https://community.openvpn.net/openvpn/wiki/OpenVPN3Linux

登录本地的Debian / Ubuntu客户端的Linux环境,编辑文件 /etc/apt/sources.list.d/openvpn3.list

添加内容

# OpenVPN3 Official Apt Repository for openvpn3.
deb https://swupdate.openvpn.net/community/openvpn3/repos stretch main
// 执行更新
root@client:~# apt-get update

// 安装必要的组件
root@client:~# apt install apt-transport-https build-essential libssl-dev

// 添加密钥
root@client:~# wget https://swupdate.openvpn.net/repos/openvpn-repo-pkg-key.pub

root@client:~# apt-key add openvpn-repo-pkg-key.pub

// 再次更新
root@client:~# apt-get update
root@client:~# apt-get upgrade

// 安装客户端
root@client:~# apt install openvpn3

// 正常安装的提示信息
Setting up libjsoncpp1:amd64 (1.7.4-3) ...
Setting up python3-dbus (1.2.4-1+b1) ...
Setting up python3-gi (3.22.0-2) ...
Setting up openvpn3 (16~beta+stretch) ...
openvpn3-autoload.service is a disabled or a static unit, not starting it.

段落3、欢快使用openvpn3客户端

附录、报错记录1,如果,安装时候的报错信息如下

The following packages have unmet dependencies:
openvpn3 : Depends: libcap-ng0 (>= 0.7.9) but 0.7.7-3+b1 is to be installed
Depends: libgcc-s1 (>= 3.0) but it is not installable
Depends: libprotobuf17 but it is not installable
Depends: libssl1.1 (>= 1.1.1) but 1.1.0l-1~deb9u4 is to be installed
Depends: libstdc++6 (>= 9) but 6.3.0-18+deb9u1 is to be installed
Depends: libtinyxml2-6a (>= 6.0.0) but it is not installable
E: Unable to correct problems, you have held broken packages.

此报错,大概率,是你编辑文件 /etc/apt/sources.list.d/openvpn3.list 文件中,你当前的Debian/Ubuntu发型版本的名称写错了。