Linux のネットワーク関連コマンド

iptables と dnsmasq も後で追記したいです。

nc

TCPUDPのデータが送受信ができるコマンド。
TCP で Listen は nc -l 12345 、Connect は nc localhost 12345 にする。
UDP にする時は -u を付ける。

tcpdump

パケットをキャプチャできるコマンド。
-t で時刻を表示しない。
-nIPアドレスの名前解決をしない。
-i でキャプチャするインタフェースを指定する。-i any だと全てのインタフェースをキャプチャする。
-A でデータをASCIIで表示する。

別のターミナルから ping 8.8.8.8 -c 2 を実行し、ICMP パケットをキャプチャする例

$ sudo tcpdump -tn -i any icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked v1), capture size 262144 bytes
IP 192.168.0.10 > 8.8.8.8: ICMP echo request, id 5, seq 1, length 64
IP 8.8.8.8 > 192.168.0.10: ICMP echo reply, id 5, seq 1, length 64
IP 192.168.0.10 > 8.8.8.8: ICMP echo request, id 5, seq 2, length 64
IP 8.8.8.8 > 192.168.0.10: ICMP echo reply, id 5, seq 2, length 64
^C
4 packets captured
4 packets received by filter
0 packets dropped by kernel

UDP でポートを指定してキャプチャする例

$ sudo tcpdump -tnlA -i any "udp and port 12345"
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked v1), capture size 262144 bytes
IP 127.0.0.1.37527 > 127.0.0.1.12345: UDP, length 4
E.. ..@.@.?A..........09....foo

IP 127.0.0.1.37527 > 127.0.0.1.12345: UDP, length 6
E..".z@.@.<O..........09...!hello

^C
2 packets captured
4 packets received by filter
0 packets dropped by kernel

lsof

プロセスが開いているファイルを表示できるコマンド。
-i でソケットだけを表示できる。-i:ポート番号 で絞り込みも可能。
-p でプロセスを指定できる。

$ lsof -i
COMMAND  PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nc      1298 vagrant    3u  IPv4  28252      0t0  TCP *:12345 (LISTEN)
nc      1339 vagrant    3u  IPv4  29509      0t0  TCP *:9999 (LISTEN)
$ lsof -i:12345
COMMAND  PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nc      1298 vagrant    3u  IPv4  28252      0t0  TCP *:12345 (LISTEN)
$ lsof -p 1339
COMMAND  PID    USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
nc      1339 vagrant  cwd    DIR    8,3     4096 5638785 /home/vagrant
nc      1339 vagrant  rtd    DIR    8,3     4096       2 /
nc      1339 vagrant  txt    REG    8,3    43664 4325590 /usr/bin/nc.openbsd
nc      1339 vagrant  mem    REG    8,3  2029224 4328519 /usr/lib/x86_64-linux-gnu/libc-2.31.so
nc      1339 vagrant  mem    REG    8,3   101320 4328538 /usr/lib/x86_64-linux-gnu/libresolv-2.31.so
nc      1339 vagrant  mem    REG    8,3    96728 4328287 /usr/lib/x86_64-linux-gnu/libbsd.so.0.10.0
nc      1339 vagrant  mem    REG    8,3   191472 4328477 /usr/lib/x86_64-linux-gnu/ld-2.31.so
nc      1339 vagrant    0u   CHR  136,0      0t0       3 /dev/pts/0
nc      1339 vagrant    1u   CHR  136,0      0t0       3 /dev/pts/0
nc      1339 vagrant    2u   CHR  136,0      0t0       3 /dev/pts/0
nc      1339 vagrant    3u  IPv4  29509      0t0     TCP *:9999 (LISTEN)

openssl s_client

openssl s_client -connectSSL/TLS 接続に関する情報を表示できる。

$ echo -e 'HEAD / HTTP/1.1\r\nHost: www.hatena.ne.jp\r\n\r\n' | openssl s_client -connect www.hatena.ne.jp:443 -quiet
depth=2 C = US, O = Amazon, CN = Amazon Root CA 1
verify return:1
depth=1 C = US, O = Amazon, OU = Server CA 1B, CN = Amazon
verify return:1
depth=0 CN = www.hatena.ne.jp
verify return:1
HTTP/1.1 200 OK
Date: Tue, 13 Jul 2021 05:29:25 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 291348
Connection: keep-alive
Server: nginx
Vary: Accept-Encoding
Vary: Accept-Encoding
ETag: "47214-Bl7Cq7MeA3CEtqJhoXukBQe/L7k"
Vary: Accept-Encoding
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block

^C