济沧浪 济沧浪
首页
  • Git
  • Linux
  • C++
  • 设计模式
  • CUDA
  • AI
金融

LonelyTaoist

道可道非常道 名可名非常名
首页
  • Git
  • Linux
  • C++
  • 设计模式
  • CUDA
  • AI
金融
  • Git

  • Linux

    • Linux 服务器编程学习笔记①
    • Linux 服务器编程学习笔记②
      • tcpdump
      • lsof
      • nc
      • netstat
    • Linux 服务器编程学习笔记③
    • Linux 服务器编程学习笔记④
    • Linux 服务器编程学习笔记⑤
    • Linux 服务器编程学习笔记⑥
    • Linux 服务器编程学习笔记⑦
    • Linux 网络 IO
    • libc库
    • Linux 小知识点
  • C++

  • 设计模式

  • CUDA

  • Python

  • VScode

  • AI

  • 计算机 小知识点
  • 计算机相关博客目录
  • 计算机
  • Linux
2021/08/18
目录

Linux 服务器编程学习笔记②

# 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: 抓取1.2.3.0/255.255.255.0 网络上的所有包:

tcpdump net 1.2.3.0/24

src, dst 后分别指定数据包的发送端, 目的端。

例2: 抓取进入端口13579的数据包:

tcpdump dst port 13579

tcpdump 还可以指定协议。

例3: 抓取所有 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 -i@192.168.1.108:22

-u, 显示指定用户启动的所有进程打开的所有文件描述符。

-c, 显示指定的命令打开的所有文件描述符。

-p, 显示指定进程打开的所有文件描述符。

-t, 显示打开了文件描述符的进程 PID。

输出解释:

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/<PID>/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 和名字。

Proto 表示协议名

Recv-Q 表示 socket 内核缓冲区中尚未被应用程序读取的数据量

Send-Q 表示未被对方确认的是数据量

State 表示 socket 的状态(若是 UDP 之类无状态连接,则不显示)。

Linux 服务器编程学习笔记①
Linux 服务器编程学习笔记③

← Linux 服务器编程学习笔记① Linux 服务器编程学习笔记③→

最近更新
01
深度学习简单介绍
04/18
02
VScode-ssh 不兼容旧版本 Linux
02/08
03
Centos6.7 安装 python3
01/25
更多文章>
Theme by Vdoing | Copyright © 2023-2024 苏ICP备2023014117号-1 苏公网安备 32011502011853号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式