对一些经常用到的 shell 命令做简要的总结,方便日后查阅。

tcpdump

tcpdump 命令用来保存和记录网络流量,即抓包工具。你可以用它来观察网络上发生了什么,并可用来解决各种各样的问题,包括和网络通信无关的问题。

Tcpdump 中的关键字主要有以下几种
1.关于类型的关键字主要包括:host、net、port。如果没有指定类型,缺省的类型是host.
2.关于确定传输方向的关键字主要包括:src、dst、dst or src、 dst and src。如果没有指明方向关键字,则缺省是src or dst关键字
3.关于协议的关键字,主要包括ip、arp、rarp、tcp、udp、icmp等类型。如果没有指定任何协议,则tcpdump将会监听所有协议的信息包。
4.其他重要的关键字:gateway, broadcast, less, greater。
5.三种逻辑运算:取非运算是'not ' ,'! ';与运算是'and','&&';或运算 是'or','││'。多条件时可以用括号,但是要用转义。

注意:该工具使用 sudo 权限去执行!

常用参数解析

参数 含义
-w 指定抓取到的数据包的保存位置
-i 指定抓取哪个网口的数据包,默认是 eth0
-s 指定从一个包中截取的字节数。0表示包不截断,抓完整的数据包
-S 将tcp的序列号以绝对值形式输出,而不是相对值
-n 指定将每个监听到数据包中的域名转换成IP地址后显示,不把网络地址转换成名字
-nn 指定将每个监听到的数据包中的域名转换成IP、端口从应用名称转换成端口号后显示
-c 指定要抓取多少数据包,默认会一直抓取,直到 ctrl+c
-v 输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息
-vv 输出详细的报文信息
-A 以ASCII格式打印出所有分组,并将链路层的头最小化
-e 打印出数据链路层的头部信息,包括源mac和目的mac,以及网络层的协议
-X 把协议头和包内容都原原本本的显示出来(tcpdump会以16进制和ASCII的形式显示)
-r 从指定的文件中读取包(这些包一般通过-w选项产生)

更多详细参数可以参考Linux抓包工具tcpdump详解

举个栗子

tcpdump -w /tmp/data -s0 -i eth0 port 3000 and host 127.0.0.1

截获流经 eth0 网口,3000 端口,并且主机地址为 127.0.0.1 收到的和发出的所有的完整(不截断)数据包,并将这些数据包保存在 /tmp/data 文件中。

tcpdump 'host 210.27.48.1 and (210.27.48.2 or 210.27.48.3)'

截获主机 210.27.48.1 和主机 210.27.48.2 或 210.27.48.3 的通信数据包。

tcpdump ip host 210.27.48.1 and ! 210.27.48.2

获取主机 210.27.48.1 除了和主机 210.27.48.2 之外所有主机通信的ip包

数据包解析

抓到的数据包都会有一个类型标识:

  • [S] – SYN (开始连接)
  • [S.] - SYN-ACK 数据包
  • [.] – 没有标记
  • [P] – PSH (数据推送)
  • [F] – FIN (结束连接)
  • [R] – RST (重启连接)

其他很容易弄懂,暂不解释。

strace

strace 常用来跟踪进程执行时的系统调用和所接收的信号。 在 Linux 世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核态模式,通过系统调用访问硬件设备。strace 可以跟踪到一个进程产生的系统调用,包括参数,返回值,执行消耗的时间。

常用参数解析

参数 含义
-o filename 将strace的输出写入文件filename 
-p pid 跟踪指定的进程pid
-f 跟踪由fork调用所产生的子进程
-ff 如果提供-o filename,则所有进程的跟踪结果输出到相应的filename.pid中,pid是各进程的进程号
-tt 在输出中的每一行前加上时间信息,微秒级
-T 显示每一调用所耗的时间
-s strsize 指定输出的字符串的最大长度.默认为32.文件名一直全部输出

lsof

lsof(list open files)是一个查看当前系统文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,该文件描述符提供了大量关于这个应用程序本身的信息。

常用参数解析

参数 含义
-p<进程号> 列出指定进程号所打开的文件
-i<条件> 列出符合条件的进程。(4、6、协议、:端口、 @ip )
-n 不把网络地址转换成名字
-P 不转换端口号,用数字表示
-c<进程名> 列出指定进程所打开的文件
-u user 某个用户打开的文件
-d<文件号> 列出占用该文件号的进程
-g gid 某个用户组打开的文件

输出解析

  • COMMAND:进程的名称
  • PID:进程标识符
  • PPID:父进程标识符(需要指定-R参数)
  • USER:进程所有者
  • PGID:进程所属组
  • FD:文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等
  • TYPE:文件类型,如DIR、REG等
  • DEVICE:指定磁盘的名称
  • SIZE:文件的大小
  • NODE:索引节点(文件在磁盘上的标识)
  • NAME:打开文件的确切名称

一般在标准输出、标准错误、标准输入后还跟着文件状态模式:r、w、u等
(1)u:表示该文件被打开并处于读取/写入模式
(2)r:表示该文件被打开并处于只读模式
(3)w:表示该文件被打开并处于只写模式
(4)空格:表示该文件的状态模式为unknow,且没有锁定
(5)-:表示该文件的状态模式为unknow,且被锁定

更多参数解析请参考lsof 一切皆文件

举个栗子

lsof /bin/bash -u username

列出与 /bin/bash 文件相关的,且 username 用户打开的进程

lsof -p 1223 -i tcp:8000 -n -P

列出 1223 进程在 8000 端口打开的 tcp 连接,地址和端口保留数字,不做转换

lsof -d 2-3

根据文件描述列出对应的文件信息

pidof

pidof用于找出正在运行的程序的进程PID(用空格分割),程序可以是一个二进制执行程序,也可以是一个shell脚本。

-s 参数只列出一个

tr

tr用来从标准输入中通过替换或删除操作进行字符转换.

常用参数

参数 含义
-d 删除所有属于第一字符集的字符
-s 把连续重复的字符以单独一个字符表示

举个栗子

echo "HELLO WORLD" | tr 'A-Z' 'a-z'

将大写字母转换成小写字母

echo "hello 123 world 456" | tr -d '0-9'

从字符串中删除数字

echo "hello world" | tr " " ,

空格换成逗号

To be continued...

参考

  1. tcpdump参数解析及使用详解
  2. 一份快速实用的 tcpdump 命令参考手册

happen
341 声望111 粉丝

几句话没办法介绍自己...


下一篇 »
gdb日常使用

引用和评论

0 条评论