作者归档:songtianlun

tcpdump 过滤数据包长度

tcpdump 支持 protocol[x:x] 表达式,用于指定某协议[起始偏移量:数值类型长度],

如指定IP包长度大于100:

tcpdump -i eth0 -n 'ip[2:2] > 100'

捕获tcp目标端口在10000和20000之间的包:

tcpdump  -i eth0 -n  'tcp[2:2]>10000' and 'tcp[2:2]<20000'

参考文献

聊聊搜索引擎的那些事儿 | 又一款国产搜索引擎502了

本文创作背景音乐:Beautiful Relaxing Music: Norway’s Nature, Violin Music, Flute Music, Piano Music, Harp Music:https://youtu.be/XEfDYMngJeE

2019年6月左右,一款国人打造的搜索引擎横空出世——多吉搜索。设计初衷为「不追踪,不误导」。但从字面和slogin来看像极了以注重用户隐私而著称的「DuckDuckGo」,甚至于作者自己也承认,在初期,自己没有太多设计方面的灵感,因此写好搜索引擎核心代码之后就借了一个自己最喜欢的皮,发布了。

在过去的这段时间里,这款搜索引擎被一众技术博客吹爆。多吉搜索的「不追踪、不误导」、「干净、纯净」、「无广告」这些特征,也确实是切中当今人们的痛点。国人最常用的百度,渐渐的失去了人们对他的信任,搜索结果不再令人信服。也许表现更好的 Google 有着更高的门槛,非技术出身或非热衷技术的普通用户很难轻易触及。甚至在许多人的眼中,百度依然是这个网络世界的唯一入口。

有不少人在体验过多吉搜索后,像少数派作者「正弦定理」一样,将多吉搜索设为自己浏览器的默认搜索引擎。

在体验过一段时间后,感觉确实不错。笔者是技术出身,时常需要搜索一些技术内容。就在我工作和生活场景中,使用多吉搜索找到的结果和Google相差无几。加上多吉搜索在国内是可以直接访问的,降低了不少门槛,我也很乐意将它推荐给身边的许多人。

好景不长,就在多吉搜索发布了不到一年半(2020年11月),多吉搜索主页突然502(网络错误的一种,直译为无效网关)。

刚开始我还以为是自己的网络出现异常,可就在我试着访问其他网页之后,我意识到,可能多吉搜索出事了。于是我去到V2EX社区,发现多吉搜索作者 @nicoljiang 发布了一份声明:

大概是说,由于一切“技术原因”,多吉搜索不得不关闭整顿,恢复时间待定。这熟悉的语调,相信技术人一看就知道是怎么回事了。这样的事情发生在自己很喜欢的产品上面,我突然意识到一些事情,可能多吉搜索确实是做大了。

当自己不具备足够的实力时,学习更多技术和知识,是自己唯一的追求;当自己的知识积累到一定程度,试着做出一些成果时会发现,技术并不是技术产品的全部。不是做得好,就一定可以取得好的成绩,拥有好的发展。技术只是开始,还有很长的路要走。

希望像「多吉搜索」这样的国人打造的好产品越来越多,希望「多吉搜索」早日完成违规内容检测功能的开发。人们的生活里,需要这样纯净、有隐私的搜索引擎。

参考文献

BuJo | 使用Notion进行个人账目管理、投资管理

Notion 是一款国人开发,依托于AWS的云笔记软件,以功能强大、兼容Markdown而著称。自从接触了Notion,笔者就预感这款软件有着无限可能。

近期学习了一种叫做 Bullet Journal (子弹笔记)的笔记方法,是一种快速记录、规划一日、一周、一月、一整年的笔记方法,用上后感觉对自己日常生活帮助很大,特别是刚刚踏入社会,对于个人财物管理和投资理财意识还不强的时候,子弹笔记中的「财务管理」部分对我帮助很大。今天就来介绍一下我个人使用Notion进行记账、投资管理的方法。

账务数据库建立

用过Notion的伙伴都知道,Notion在兼容Markdown的基础上,加强了对表格功能的支持,用户可以自由的在表格之间建立连接,使用公式等。

因此使用Notion建立个人财物管理的第一步,就是建立几个数据库。建立的数据库分别是:账本、账户、基金账户、投资账本。四个数据库的依赖关系大概是这样:

建立好数据库之后就是往里面存内容了,下面来介绍各个数据库之间的依赖关系,以及分别是什么功能。

系统成型

首先是「账本」这个数据库:

数据库建立好之后大概如上图所示,收入、支出全部存在这里,更像是是一个流水。未来还可以加入一些看板,依托这个数据库,可以统计每个月的收支情况。

在账本中当然要包含日期、金额、渠道这些信息了。不过这里要注意,「渠道」这个字段是依赖于接下来要讲的「账户」这个数据库中的字段。

在「账户」中包含了个人用于存放资金的几个账户,包含了账户名称、总额、可用总额、已投资等字段,其中的账户名称是这个数据库的重头,其他数据库依赖这里的账户,之后的总额、已投资这些字段都是通过计算「账本」以及「投资账本」中的字段SUM来填充。

「账户」字段的目的在于掌握自己几个账户的金额,在记账时直接从这个账户扣除,省去了许多匹配所需的力气。

有了账本和账户,就可以管理自己的日常收支了。那我想用账户里的闲钱做些投资,这些钱如何去管理呢?就需要下面这两个数据库了。

首先是「投资账本」数据库,这里记录了本金、基金、时间等字段,对于理财产品的买入卖出就在这里记录啦。而这里的‘基金’字段则是依赖于下面的「投资账户」这个数据库。

在「投资账户」数据库里,存储了需要在「投资账本」中调用的基金名称,以及通过计算得到的该基金现有持仓总额,‘收益’也记录在这里。这样,各个基金的投资收益以及买入卖出情况就一目了然啦。

总结

使用Notion,建立这四个数据库,就可以实现对于个人资金的记录和管理了。

可能有人会说,自己有多少钱,基金的持仓收益不是一目了然吗?但是我们常常会使用多个账户、软件、平台去消费、投资,在Notion建立账本的目的就是记录自己的收支情况,让自己的每一笔消费、基金买卖有迹可循,对于个人财物情况也有一个很清晰的认识,可以帮助有需要的朋友更好的管理资金,量化行动,更早地实现「财务自由」。

Bullet Journal 的前世今生 | 效率至上

《子弹笔记》的作者赖德·卡罗尔,为了体现这套方法的速度、效率、内容和目的,决定称其为“子弹笔记术”(Bullet Journal,简称Bujo)。

作者卡罗尔并不是生来就带有这种“高效”的基因,相反,卡罗尔儿时被诊断出患有注意力分散症。于是他用了数年时间开发了“子弹笔记”这一独特的笔记术,并建立了官方网站bulletjournal.com,帮助全球千万人高效规划自己的工作和生活。

如今,得益于子弹笔记社区的良好反馈,这种笔记方法在全球范围内的影响力越来越大。说是笔记,我理解的子弹笔记是一种伴随自己生活的快速规划、记录方法。使用子弹笔记来规划、记录自己的生活可使当下有规划,未来有参考

当下有规划,是说子弹笔记的规划部分。说到规划部分,在卡罗尔所著《子弹笔记》中提到了一种快速记录法,利用了几种方式来解决项目落地问题。可以将事件的记录分解为以下几点:

  • 你需要做的事情——任务(Task)
  • 你的经历——事件(Event)
  • 你不想遗忘的信息——笔记(Note)

这样就可以比较快速的记下一件事务的关键点,方便后期完成。其实根据作者的说法:子弹笔记不仅可以是任务清单、日记本、规划簿、速记本,还可以是囊括这一切特点的笔记本。当你记下这一切,也就为未来的生活准备了参考。

由于个人的偏好,我个人所制作的子弹笔记依托于 Notion 这个平台,其中囊括了月计划、日记录、GTD、书单、快乐清单、资金管家几个部分。我主要用它来进行任务管理、个人项目规划、资金管理、阅读管理、快乐管理、日常记录、复盘等。

综上,子弹笔记为高效而生,为高效服务,用好了不但可以克服生活种种压力带来的焦虑,还能让自己得到稳步的成长。我个人已经用了两个月的子弹笔记,从刚开始好无头绪,到现在已经为个人需求定制了三次子弹笔记的模版。1000个人手中应该有1000种子弹笔记,这也许就是它的神奇之处吧。

如果大家喜欢,未来我会分享自己子弹笔记各个部分的记录方法,尽情期待。

苹果M1芯片对大众生活的影响 | M1现存问题及未来发展 | MacBook

苹果在今年(2020年)11月11日凌晨举办的今秋第三场线上发布会上发布了搭载Apple自研M1芯片的Mac,分别是MacBook Air、13寸MacBook Pro 以及 Mac mini。苹果这一“不讲武德”直接干翻老大哥英特尔的行为在科技圈引起轩然大波,苹果这一举动也为死水般的笔记本市场溅起一阵阵波浪。那这苹果自研芯片究竟会给人们的生活带来什么变化呢?

看了许多关于搭载新款M1芯片Mac的测评视频,还没有真实上手体验,但就我个人现有的认知,来谈谈M1芯片的发布究竟会为大家带来什么变化。

比起苹果M1芯片发布对科技圈乃至整个世界的价值在这里就不多谈了,作为广大普通消费者的一员,可能更加关心这对我们现有生活的改变。

如果让我说M1会带来什么改变?我目前可以想到的大概是以下几点:

  1. 笔记本电脑续航提升,人们距离轻办公甚至创作又近了一步;
  2. 日常办公效率提升,人们可以更快的处理更多的轻文档,甚至高清视频制作;
  3. 日常生活中笔记本、平板和手机的界限进一步模糊,未来也许可以根据喜好选择合适的设备进行办公。

首先是续航,arm架构的CPU功耗很低,新款MacBook轻松带来20小时续航,足足比前代产品提升一倍。这对于新mac可覆盖工作需求的这部分用户来说绝对是一件好事情,但相应的,带来的弊端会在后面慢慢说。

其次是效率,但看跑分,新芯片的算力直接翻倍,干翻前代几乎所有MacBook,甚至超越至强处理器。这会使得可运行在该芯片上的应用程序运行效率倍增,人们可以花费更少的时间获得更多的成果,效率翻倍。

最后是日常体验,M1芯片同iPhone和ipad处理器是同种架构,应用可互通,无缝迁移,这也使得为手机和平板定制的软件可以直接跑在电脑上,不需要虚拟机。这就打破了曾经电脑和手机操作系统甚至到硬件的高墙,未来不需要考虑需要运行的软件在哪个设备上,只需要问自己,是想要用手机还是电脑。

综上,大概就是我想到的对人们生活的改变。但在这里我也想提一些M1芯片目前已知的限制。

  1. 无法运行windows虚拟机;
  2. 无法运行docker。

虽然苹果借助原生的插件,使得原有基于intel x86架构软件直接可以跑在M1上,而且效率不错,但像这种开发者常用的需要涉及到CPU支持的软件就很难在简单翻译后直接运行。MacBook下的parallels虚拟机软件可以让Windows几乎无缝的运行在MacOS上,但这都需要CPU的支持,因此需要这些专业软件的开发者或需要windows运行环境的人们,目前的M1芯片MacBook是不能满足需求的。

科技互联网的发展过于迅速,谁也不难预料明年的格局会是怎样。

相信在未来,这些问题都会得到解决。十五年前,MacBook从power PC 过渡到采用x86架构的CPU。是因为x86成为桌面产品的主流,苹果选择了x86,还是因为苹果选择了x86,使得x86成为了主流呢?

无论怎样,云计算、大数据、5G的发展,势必会给人们的生活带来翻天覆地的变化,未来的人们将会越来越依赖互联网和计算机,它们距离人们越来越近,体形却越来越模糊,从智能手表到智能手机,再到无数智能家居,这都可以理解为一个个小计算机,这些计算机通过互联网连接起来,通过wifi、4G还有未来的5G相连。科技的发展减轻了人们的负担,带给人们数不尽的选择。未来的人们,再也不需要为了得不到而担心,但是将会为选择太多而焦虑。

参考文献

随机命令自动测试脚本 | SecureCRT 下 Python 实现

在进行命令终端软件开发及通信道路开发时,常常需要测试终端的稳定性,此时通过命令脚本自动化的敲命令可以节省许多人力,这里写了一个SecureCRT终端模拟软件下python实现的自动化测试脚本,可以从命令列表中随笔选取命令进行测试,具有设置睡眠时间及超时发现功能。

# $language = "python"
# $interface = "1.0"

# This automatically generated script may need to be
# edited in order to work correctly.

import time
import math
import random

start_time = time.time()
end_time = time.time()
cmd = "show sw"
cmd_list = [
    'show interface switchport xge 1/0/20',
    'show vlan all',
    'show arp all',
    'show mac-address all',
    'show trap message filter level 1'
]
cmd_list_len = len(cmd_list) - 1
time_sleep = 0.1
time_out = 30

def Main():
    crt.Screen.Send("co te\r\n")
    crt.Screen.Send("int xge 1/0/6\r\n")
    while True:
        end_time = time.time()
        crt.Screen.Synchronous = False
        #crt.Screen.Send(cmd)
        CmdNum = random.randint(0,cmd_list_len)
        crt.Screen.Send(cmd_list[CmdNum])
        crt.Screen.Send("\r\n")
        running_time = end_time - start_time
        running_min = math.ceil(running_time / 60) - 1
        if (crt.Screen.WaitForCursor(time_out)):
            #crt.Screen.Send("\r\n")
            #crt.Screen.Send("\r\n")
            #crt.Screen.Send("\r\n")
            #crt.Screen.Send("\r\n")
            #crt.Screen.Send("\r\n")
            if CmdNum == 10:
                time.sleep(10)
            else:
                time.sleep(time_sleep)
            #time.sleep(100 / (running_time / 1000))
        else:       
            msg = "超时无响应,运行报告:\n" + \
                "running time : " + str( running_min ) + " min " + str(running_time - running_min * 60 - time_out) + " s "  + "\n" + \
                "start ms        : " + str(start_time)             + "\n" + \
                "ent ms          : " + str(end_time)               + "\n"
            crt.Dialog.MessageBox(msg,"session",64|2)

Main()

【阅记】天气之子 | 有时需要些治愈系

还记得上一次,阅读那本《解忧杂货铺》;还有那一次,观赏《解忧杂货铺》;再有在那2020年的4月份,观赏《解忧杂货铺》。内心里涌动着一股暖流,驱散了许多阴霾。

刚开始阅读这本《天气之子》,感觉有些“矫情”。可就在上一个周末午休过后,翻开这本《天气之子》,居然一下子就进去了书中的意境,感受到长期处于阴霾中的人们,对晴天的那种向往。让人一瞬间欢喜,又一瞬间产生怀疑,这美好是真实存在的吗?果然还最后,晴天少女的命运总是悲哀,因为她为人们祈求来晴天,自己却一点一点化为晴空。

https://imagehost-cdn.frytea.com/images/2020/11/08/20201108223009d6b21e76439c2955.png

壹 · 少年出走

主人公帆高感觉岛上的那个家压的自己喘不过气,孤身一人带着一些钱偷跑到东京。被东京这座城市的种种震撼的同时,帆高也一步步长大,与一些人、事结缘。

  • 看到这里,在想这段描写写出了多少人们的心声。小的时候由于种种原因,被压的喘不过气,想要逃跑却又走不掉,无人理解只能自己消化,早就憋屈的内心。我想正是如此,这部作品才被这么多人所熟知吧。

https://imagehost-cdn.frytea.com/images/2020/11/08/20201108223112434e02960f41b055.png

来到东京,第一个要面对的就是“活下去”。没有收入就活不下去,考虑到许多现实因素,在梦想的初期一定是理性的先解决物质问题。

  • 我想看过这段故事的人,如果你还小,大概可以得到一些警示吧。我想看到这段故事的大人,如果有孩子,也可以得到一些警示吧。对于小孩子,外面的世界不是那么简单,他远比想象中的要复杂、多变。在没有长出丰满的羽翼之前,要不断的自我历炼,学会立足的本领。对于有孩子的人们,是不是足够了解自己的孩子呢,是不是足够了解他们内心的想法呢?如果没有,试想思绪不成熟的小孩子在冲动下会做出多么不堪设想的举动。

贰 · 拨云见日

少女阳菜,偶然间成为了天选之子——天气之子。拥有不可思议本领的同时,也注定了悲哀的解决。可这世界就是这样残忍,想要得到些什么,就必须牺牲些什么来换,不可能无偿索取。反过来说, 无偿索取,一定是不可持续的。

https://imagehost-cdn.frytea.com/images/2020/11/08/2020110822314214668304515925e9.png

阳菜和帆高一样,一样的未成年,但都被现实所迫。不得不赚钱,两人凑在一起,做起了“天气”的生意。由于少女阳菜是100%晴天少女,口碑很快好了起来。她也爱上了这份工作——晴天少女。

  • 商机蕴藏在人们的需求之中。正是连日阴雨,造就了晴天这个刚需。也正是每日处在阴霾之中,才会想念雨过天晴的美好。越是阴霾,就越是想念。于是晴天少女的生意越来越好。

人们处在连日阴雨之中,主人公阳菜和帆高,不也一直处在生活的阴霾之中吗。现在生意好起来,生活好了一些,他们是多想这样的生活继续下去呀。

但是别忘了,晴天少女的命运——牺牲自己,换来晴天。

叁 · 人生意义

晴天少女躲不过悲哀的命运,她选择了坦然接受。用自己最后的力量,换来了人世间长久的晴天。晴天的街道,就像是一幅刚出彩的油画,美丽动人。晴天少女的牺牲,换来了人间的晴天。

  • 在许多地方都是这样吧,必须放弃些什么,才能换来更深刻的价值。有时候必须牺牲自己,才能换来更多人的幸福。医生、警察、铁路员,过节不能团聚,换来的是大多数家庭的团聚。程序员不知疲倦的通宵达旦,换来的是人们畅快访问的不间断体验。领导没日没夜的四处奔走,换来整个公司的良性运转。

https://imagehost-cdn.frytea.com/images/2020/11/08/202011082232195b32cd281b9b4b5c.png

我们因为父母亲人朋友的无偿给予,得以长大成人。等我们有了力量,就可以回馈这个世界,为未来的人们带去更多的美好。

总结

这样的感觉很奇妙,这些日子看了许多本/部《哈利 · 波特》,看了《东方快车谋杀案》,发觉看过原著再看电影,真的可以捕获到太多的细节。电影是许多人对原著理解的堆叠,为的是更多的人喜欢而反馈的流量和热情。对于细节的理解,看过书籍,就可以辩证的看待电影,或许能看到更多的东西。

https://imagehost-cdn.frytea.com/images/2020/11/08/202011082234170cddf781f8938fa9.png

《天气之子》,《解忧杂货店》,带给阴霾中的人们一些光明。有时候,来点治愈系,或许比励志和理智更有力量。

感恩那些无偿奉献的输出者,感谢他们带来的深刻与感动。

(图片来源:网络)

frp实现内网穿透 | frp服务端配置 | frp客户端配置

frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。

这里简单记录其客户端及服务端的配置方法。

一、frp 服务端

下载

目前可以在 Github 的 Release 页面中下载到最新版本的客户端和服务端二进制文件,所有文件被打包在一个压缩包中。

部署

解压缩下载的压缩包,将其中的 frpc 拷贝到内网服务所在的机器上,将 frps 拷贝到具有公网 IP 的机器上,放置在任意目录。

开始使用!

编写配置文件,先通过 ./frps -c ./frps.ini 启动服务端,再通过 ./frpc -c ./frpc.ini 启动客户端。如果需要在后台长期运行,建议结合其他工具使用,例如 systemd 和 supervisor

# 前台启动
./frpc -c ./frpc.ini

# 后台启动命令
nohup ./frpc -c ./frpc.ini &

frps.ini 配置文件类比:

[common]
bind_port        = 17000               # 服务监听端口
bind_addr        = 0.0.0.0             # 监听IP
token            = 123456              # 密钥
dashboard_port   = 17001               # web面板
dashboard_user   = admin               # 面板用户名
dashboard_pwd    = admin               # 面板密码
subdomain_host   = *.your_doming.com   # WEB访问域名绑定(绑定后只能绑定子域名访问)
vhost_http_port  = 10000               # web服务http端口
vhost_https_port = 10001               # web服务https端口

# 注:以上配置根据需求设置,最简单的配置只需要前两行,既仅配置服务监听端口,其余按需配置。

使用systemctl来控制启动

sudo vim /lib/systemd/system/frps.service

服务内容:

[Unit]
Description=fraps service
After=network.target syslog.target
Wants=network.target

[Service]
Type=simple
#启动服务的命令(此处写你的frps的实际安装目录)
ExecStart=/your/path/frps -c /your/path/frps.ini

[Install]
WantedBy=multi-user.target

使用方法:

# 启动frps
sudo systemctl start frps
# 自启动
sudo systemctl enable frps
# 重启应用
sudo systemctl restart frps
# 停止应用
sudo systemctl stop frps
# 查看应用的日志
sudo systemctl status frps

有一些网站会免费提供frp服务,比如:https://www.ioiox.com/frp.html

二、frp 客户端

配置文件:

[common]
server_addr = free.frp.ioiox.com  # 服务器IP或者地址
server_port = 7007                # 服务器提供的端口号
token = www.ioiox.com             # 服务器提供的token

[web1]                            # 为避免错误,一定需更改为比较特殊的名称,不能和服务器端其他配置重名.
type = http                       # http协议
local_ip = 127.0.0.1              # 127.0.0.1指穿透本机,也可以填写内网IP.
local_port = 5000                 # 群晖内网HTTP端口,默认为5000.
custom_domains = nas.ioiox.com    # 填写你的域名

[web2]                            # 为避免错误,一定需更改为比较特殊的名称,不能和服务器端其他配置重名.
type = https                      # https协议
local_ip = 127.0.0.1              # 127.0.0.1指穿透本机,也可以填写内网IP.
local_port = 5001                 # 群晖内网HTTPS端口,默认为5001.
custom_domains = nas.ioiox.com    # 填写你的域名

[OpenVpn]
type = udp                        # 协议
local_ip = 192.168.123.142        # 127.0.0.1指穿透本机,也可以填写内网IP.
local_port = 1194                 # 内网端口
remote_port = 11194               # 远程连接端口

启动方法及安装方法类比服务端配置。

参考文献

群晖OpenVPN服务器网关配置

使用群晖OpenVpn服务套件搭建了VPN服务后,导出配置文件,默认是不会在客户端的 openvpn.ovpn 文件中设置重定向网关选项的,此时连接上VPN是无法通过该VPN访问互联网的,只能访问局域网。如果想要访问互联网,打开网管重定向即可:

# If redirect-gateway is enabled, the client will redirect it's
# default network gateway through the VPN.
# It means the VPN connection will firstly connect to the VPN Server
# and then to the internet.
# (Please refer to the manual of OpenVPN for more information.)

redirect-gateway def1

之后重新连接,会发现网关已经被指定为VPN局域网内DHCP分发的网关。