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开发工具链

shell脚本中的循环


找到之前的记录,重新整理了一下 两台电脑共享一套鼠标和键盘