Linux Blog
新增一篇总结Linux同步机制的笔记。 Linux中的race condition方案
最近开始学习Linux驱动相关的内容: Linux驱动入门笔记 。
双一次使用了scapy,这次干脆搞一个地方总结scapy的用法: 神奇的发包工具scapy
最近几个月开始使用rss,我先注册了feedly,然后转战inoreader。我发现使用rss的一些不可明状的好处。
前段时间,我购入了一台E-ink的 Boox Note Lite 。 我主要是看中它E-ink屏幕,大。 它是android系统,当时感觉可玩性应该还是很高的。 于是我在它上面下载了一个应用 FeedMe。 用完后感觉吧,还是不太爽,一个是耗电,一个是翻页这些也不爽。用起来还是不太顺手。而且每次都还得连网,又麻烦,又耗电。
后来就又在Mac和ios上下载了 reeder。 用起来还可以,不过看久了眼睛又不爽。
那么可不可以把我所有RSS制做成Ebook,然后整个放到Boox或者Kindle上去离线看呢?
然后我搜了一下,原来, calibre 就可以呀。 直接配置自定义的新闻,然后抓取就可以了。 不过它不支持整个xml导入rss源。这没关系,本来我的源也没多少。直接一个一个添加上。然后设置定时每天抓取就可以了。 这下可以离线安安静静地阅读了。
但是这样,之前所说的不可明状的好处就没有了。不过这个太要紧。我有办法解决。哈哈。
这次测试协议vlan的时候,需要构造一些二层报文。刚开始同事推荐了一下ipop。试用了一下老是发不出报来。于是在网上搜到了 scapy 。
原来在测试igmp的时候,我就用过这货。当时还记录在了 2018-03-26-Linux下的工具 。
当时完成写在python文件中的,这次我查了一下文档 https://scapy.readthedocs.io 。可以有好几种方式来使用它。
直接运行scapy,然后一行一行地运行其实是很方便的,比如文档的中的例子:
>>> a=IP(ttl=10)
>>> a
< IP ttl=10 |>
>>> a.src
’127.0.0.1’
>>> a.dst="192.168.1.1"
>>> a
< IP ttl=10 dst=192.168.1.1 |>
>>> a.src
’192.168.8.14’
>>> del(a.ttl)
>>> a
< IP dst=192.168.1.1 |>
>>> a.ttl
64
发送报文也很简单:
>>> send(IP(dst="1.2.3.4")/ICMP()) . Sent 1 packets. >>> sendp(Ether()/IP(dst="1.2.3.4",ttl=(1,4)), iface="eth1") .... Sent 4 packets. >>> sendp("I'm travelling on Ethernet", iface="eth1", loop=1, inter=0.2) ................^C Sent 16 packets. >>> sendp(rdpcap("/tmp/pcapfile")) # tcpreplay ........... Sent 11 packets. Returns packets sent by send() >>> send(IP(dst='127.0.0.1'), return_packets=True) . Sent 1 packets. <PacketList: TCP:0 UDP:0 ICMP:0 Other:1>
我写了一个简单地python的例子,这个例子中,主要是修改了ether_type字段,也修改了每个报文的mac地址,这是为了方便我调试协议VLAN:
#!/usr/bin/python from scapy.all import * from scapy.contrib.igmp import IGMP import random sendp(Ether(src="f8:09:23:00:00:01", dst="f8:07:24:00:00:01", type=0x0801)/IP(dst="192.168.30.2", ttl=(1, 1)), iface="eth0", inter=0.2) sendp(Ether(src="f8:09:23:00:00:02", dst="f8:07:24:00:00:01", type=0x0802)/IP(dst="192.168.30.2", ttl=(1, 1)), iface="eth0", inter=0.2) sendp(Ether(src="f8:09:23:00:00:03", dst="f8:07:24:00:00:01", type=0x0803)/IP(dst="192.168.30.2", ttl=(1, 1)), iface="eth0", inter=0.2) sendp(Ether(src="f8:09:23:00:00:04", dst="f8:07:24:00:00:01", type=0x0804)/IP(dst="192.168.30.2", ttl=(1, 1)), iface="eth0", inter=0.2) sendp(Ether(src="f8:09:23:00:00:05", dst="f8:07:24:00:00:01", type=0x0805)/IP(dst="192.168.30.2", ttl=(1, 1)), iface="eth0", inter=0.2) sendp(Ether(src="f8:09:23:00:00:06", dst="f8:07:24:00:00:01", type=0x0806)/IP(dst="192.168.30.2", ttl=(1, 1)), iface="eth0", inter=0.2) sendp(Ether(src="f8:09:23:00:00:07", dst="f8:07:24:00:00:01", type=0x0807)/IP(dst="192.168.30.2", ttl=(1, 1)), iface="eth0", inter=0.2) sendp(Ether(src="f8:09:23:00:00:08", dst="f8:07:24:00:00:01", type=0x0808)/IP(dst="192.168.30.2", ttl=(1, 1)), iface="eth0", inter=0.2) sendp(Ether(src="f8:09:23:00:00:09", dst="f8:07:24:00:00:01", type=0x0809)/IP(dst="192.168.30.2", ttl=(1, 1)), iface="eth0", inter=0.2) sendp(Ether(src="f8:09:23:00:00:0a", dst="f8:07:24:00:00:01", type=0x080a)/IP(dst="192.168.30.2", ttl=(1, 1)), iface="eth0", inter=0.2) sendp(Ether(src="f8:09:23:00:00:0b", dst="f8:07:24:00:00:01", type=0x080b)/IP(dst="192.168.30.2", ttl=(1, 1)), iface="eth0", inter=0.2) sendp(Ether(src="f8:09:23:00:00:0c", dst="f8:07:24:00:00:01", type=0x080c)/IP(dst="192.168.30.2", ttl=(1, 1)), iface="eth0", inter=0.2) sendp(Ether(src="f8:09:23:00:00:0d", dst="f8:07:24:00:00:01", type=0x080d)/IP(dst="192.168.30.2", ttl=(1, 1)), iface="eth0", inter=0.2) sendp(Ether(src="f8:09:23:00:00:0e", dst="f8:07:24:00:00:01", type=0x080e)/IP(dst="192.168.30.2", ttl=(1, 1)), iface="eth0", inter=0.2) sendp(Ether(src="f8:09:23:00:00:0f", dst="f8:07:24:00:00:01", type=0x080f)/IP(dst="192.168.30.2", ttl=(1, 1)), iface="eth0", inter=0.2) sendp(Ether(src="f8:09:23:00:00:10", dst="f8:07:24:00:00:01", type=0x0810)/IP(dst="192.168.30.2", ttl=(1, 1)), iface="eth0", inter=0.2)后面可以在这上面再做定制。
初步翻完 GNU构建系统 。翻译好累!
最近被 Automake 和 Autoconf 搞烦了。准备好好研究下。我发现这方面的中文内容不太多。 缺少系统的文档。所以我准备翻译一些文档。过程也当学习。选择了这篇: Learning the GNU development tools 。
我翻译的在这里: 学习GNU开发工具链
找到之前的记录,重新整理了一下 两台电脑共享一套鼠标和键盘 。