Linux高性能服务器编程 学习笔记②

Linux高性能服务器编程 学习笔记②

  • Linux 系统工具
    • tcpdump
    • lsof
    • nc
    • netstat
  • 总结

Linux 系统工具

tcpdump

  tcpdump 是一款网络抓包工具(不过Wireshark更加容易使用和掌握),在一些特殊场景,其仍然是必备利器。
  一些参数如下:
  -n, 使用ip地址表示主机(而非主机名),端口号数字表示服务(而非服务名)。
  -i, 指定要监听的网卡接口。 -i any 表示抓取所有网卡接口。
  -t, 不打印时间戳。
  -e, 显示以太网帧头部信息(物理地址)。
  -c, 抓取指定数量数据包。
  -x, 以16进制显示数据包内容。
  -X, 在-x基础上显示每个字节对应的 ASCII 字符。
  -S, 以绝对值显示 TCP 报文序号而不是相对值。
  -w, 将输出以特殊格式定向到某个文件。
  -r, 从文件读取数据包信息并显示。
  host, net, port, portrange 后分别指定主机名(或IP地址), 网络地址, 端口号, 端口号范围。
    例: 抓取1.2.3.0/255.255.255.0 网络上的所有包:
       tcpdump net 1.2.3.0/24
  src, dst 后分别指定数据包的发送端, 目的端。
    例: 抓取进入端口13579的数据包:
       tcpdump dst port 13579
  tcpdump 还可以指定协议。
    例: 抓取所有 ICMP 数据包:
       tcpdump icmp
  tcpdump 还可以使用逻辑表达式,示例如下:
   tcpdump 'tcp[tcpflags] & tcp-syn != 0' 抓取 TCP SYN 字段不为 0 的报文段。
    注: 加引号是防止逻辑表达式被 shell 解释了。

lsof

  lsof (list open file)是一个列出当前系统打开的文件的工具。
  一些参数如下:
  -i, 显示 socket 文件描述符
    例; 显示连接到主机 192.168.1.108 的 ssh 服务(端口 22)的 socket 文件描述符。
       lsof [email protected]:22
  -u, 显示指定用户启动的所有进程打开的所有文件描述符。
  -c, 显示指定的命令打开的所有文件描述符。
  -p, 显示指定进程打开的所有文件描述符。
  -t, 显示打开了文件描述符的进程 PID。
  输出解释:
Linux高性能服务器编程 学习笔记②_第1张图片
   COMMAND ——程序所使用的终端命令(默认九个字符)
   PID ——所属进程 PID
   USER ——所属用户用户名
   FD ——文件描述符(“cwd"表示进程工作目录;“rtd"表示用户根目录;“txt"表示进程运行的程序代码;“mem"表示直接映射到内存中的文件;还有"文件描述符+权限”;”-r"可读;”-w”可写;”-u"可读可写。例:"0r"表示标准输入,"1w"表示标准输出,"2w"表示标准错误输出)
   TYPE ——文件描述符类型("DIR"表示目录;"REG"表示普通文件;"CHR"表示字符设备文件;"IPv4"表示IPv4类型的socket;"0000"表示未知)
   DEVICE ——文件所属设备(“主设备号,次设备号”)
   SIZE/OFF ——文件大小或偏移值(“0t”表示是偏移值,否则是文件大小)
   NODE ——文件的 inode 号(对于 socket 显示协议名)
   NAME ——文件的路径(名字)
   注:在 /proc//fd 文件中存储了当前进程的文件描述符和对应的打开文件。

nc

   nc (netcat)用于构建网络连接。默认以客户端方式和 TCP 协议运行。
  一些参数如下:
  -l, 以服务器方式运行,监听指定端口。
  -n, 使用 IP 地址和 port 端口号表示连接。
  -p, 以客户端方式运行时,强制使用指定的端口号。
  -s, 设置本地主机发送出的数据包 IP 地址。
  -u, 使用 UDP 协议。
  -z, 扫描目标机器上的某个或某些服务(端口)是否开启。
  -C, 使用CRLF两个字符作为结束符。

netstat

  netstat 是一个网络信息统计工具。
  一些参数如下:
  -n, 使用 IP 地址和 port 端口号表示地址。
  -a, 结果包含监听 socket。
  -t, 仅显示 tcp 连接。
  -r, 显示路由信息。
  -i, 显示网卡接口数据流量。
  -c, 每隔 1 秒输出一次。
  -o, 显示 socket 定时器信息。
  -p, 显示 socket 所属进程 PID 和名字。
Linux高性能服务器编程 学习笔记②_第2张图片
  Proto 表示协议名; Recv-Q 表示 socket 内核缓冲区中尚未被应用程序读取的数据量; Send-Q 表示未被对方确认的是数据量; State 表示 socket 的状态(若是 UDP 之类无状态连接,则不显示)。

总结

  这是我自己整理的学习笔记,主要用于自我复习。如果有大佬也看到了这个并且发现了谬误,欢迎email me at [email protected]

你可能感兴趣的:(Linux高性能服务器,linux,网络,ubuntu)