1. tcpdumpの基本コマンド
tcpdump -n 将主机名转换为IP地址
tcpdump -v 信息增多
tcpdump -i lo 指定网络接口,eth或者lo这类的
tcpdump -w ./tcpdata.pcap 将信息保存为tcpdata.pcap,支持使用wireshark工具分析
tcpdump -r ./tcpdata.pcap 从tcpdata.pcap读数据
tcpdump -s 100 指定抓包大小,缺省抓65535字节的,可以指定100字节,表示过滤掉超过100字节的size
tcpdump -c 100 抓100个数量包就退出
tcpdump -XX(xx) 打印16进制数据
tcpdump -A 只打印ASCII码
2.tcpdumpフィルタリング
tcpdump -nvvv -i lo host 127.0.0.1 查找特定网卡和特定主机的流量
tcpdump -nvvv -i lo src host 127.0.0.1 只显示源地址为特定主机的流量
tcpdump -nvvv -i lo dst host 127.0.0.1 只显示目标ip的主机流量
tcpdump -nvvv -i lo port 9877 and port 65522 只显示端口9877和65522的流量
tcpdump -nvvv -i lo '(port 9877 or port 22) and host 127.0.0.1' 查找两个特定端口和来自特定主机的数据流
tcp dump -nvvv -i lo 'port 80 and host 127.0.0.1'
tcpdump tcp -nvvv -i lo 对tcp协议进行抓包,网卡为回环
注意: 如果写成
tcpdump tcp -nvvv -i lo host 127.0.0.1会报错,因为tcp层检测的是port,所以可以按照如下 tcpdump tcp -nvvv -i lo port 22 或者 tcpdump tcp -nvvv -i lo and host 127.0.0.1
3. 実戦
1) クライアントコード
コードリソースとコンパイル送信: リンク: unpv13e コンパイルコードパスとarm で実行
root@ubuntu:/opt/socket/unpv13e/intro# ./daytimetcpcli 127.0.0.1
火曜日 5 月 31 日 13:57:16 2022
#include "unp.h"
int
main(int argc, char **argv)
{
int sockfd, n;
char recvline[MAXLINE + 1];
struct sockaddr_in servaddr;
if (argc != 2)
err_quit("usage: a.out <IPaddress>");
if ( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
err_sys("socket error");
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(13); /* daytime server */
if (inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0)
err_quit("inet_pton error for %s", argv[1]);
if (connect(sockfd, (SA *) &servaddr, sizeof(servaddr)) < 0)
err_sys("connect error");
while ( (n = read(sockfd, recvline, MAXLINE)) > 0) {
recvline[n] = 0; /* null terminate */
if (fputs(recvline, stdout) == EOF)
err_sys("fputs error");
}
if (n < 0)
err_sys("read error");
exit(0);
}
2) サーバーコード
コンパイルされた実行可能ファイルとパス:
root@ubuntu:/opt/socket/unpv13e/intro# pwd
/opt/socket/unpv13e/intro
root@ubuntu:/opt/socket/unpv13e/intro# ./daytimeetcpsrv
#include "unp.h"
#include <time.h>
int
main(int argc, char **argv)
{
int listenfd, connfd;
struct sockaddr_in servaddr;
char buff[MAXLINE];
time_t ticks;
listenfd = Socket(AF_INET, SOCK_STREAM, 0);
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(13); /* daytime server */
Bind(listenfd, (SA *) &servaddr, sizeof(servaddr));
Listen(listenfd, LISTENQ);
for ( ; ; ) {
connfd = Accept(listenfd, (SA *) NULL, NULL);
ticks = time(NULL);
snprintf(buff, sizeof(buff), "%.24s\r\n", ctime(&ticks));
Write(connfd, buff, strlen(buff));
Close(connfd);
}
}
3) キャプチャして実行する
最初にサーバーを実行し、次にクライアントを実行し、クライアントを実行する前に tcpdump を実行してパケットをキャプチャします。
- チェックフラグ、[s] はアクティブな接続を意味します、SYN J、[S.] は SYN K の確認、ACK J+1、[.] は ACK K+1 を意味します [P] はデータプッシュを意味します、[F] -FIN はアクティブクローズを意味し
ます、[R] -RST、接続を再開することを意味します
root@ubuntu:/opt/socket/unpv13e/intro# tcpdump tcp -nvvv -i lo 'port 13 and host 127.0.0.1' -XX
tcpdump: listening on lo, link-type EN10MB (Ethernet), capture size 262144 bytes
13:51:26.547092 IP (tos 0x0, ttl 64, id 32738, offset 0, flags [DF], proto TCP (6), length 60)
127.0.0.1.56914 > 127.0.0.1.13: Flags [S], cksum 0xfe30 (incorrect -> 0x8813), seq 2966685731, win 65495, options [mss 65495,sackOK,TS val 1016067079 ecr 0,nop,wscale 7], length 0
0x0000: 0000 0000 0000 0000 0000 0000 0800 4500 ..............E.
0x0010: 003c 7fe2 4000 4006 bcd7 7f00 0001 7f00 .<..@.@.........
0x0020: 0001 de52 000d b0d4 0823 0000 0000 a002 ...R.....#......
0x0030: ffd7 fe30 0000 0204 ffd7 0402 080a 3c8f ...0..........<.
0x0040: f407 0000 0000 0103 0307 ..........
13:51:26.547181 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 60)
127.0.0.1.13 > 127.0.0.1.56914: Flags [S.], cksum 0xfe30 (incorrect -> 0x0dc8), seq 1034488838, ack 2966685732, win 65483, options [mss 65495,sackOK,TS val 1016067079 ecr 1016067079,nop,wscale 7], length 0
0x0000: 0000 0000 0000 0000 0000 0000 0800 4500 ..............E.
0x0010: 003c 0000 4000 4006 3cba 7f00 0001 7f00 .<..@.@.<.......
0x0020: 0001 000d de52 3da9 0c06 b0d4 0824 a012 .....R=......$..
0x0030: ffcb fe30 0000 0204 ffd7 0402 080a 3c8f ...0..........<.
0x0040: f407 3c8f f407 0103 0307 ..<.......
13:51:26.547195 IP (tos 0x0, ttl 64, id 32739, offset 0, flags [DF], proto TCP (6), length 52)
127.0.0.1.56914 > 127.0.0.1.13: Flags [.], cksum 0xfe28 (incorrect -> 0x3483), seq 1, ack 1, win 512, options [nop,nop,TS val 1016067080 ecr 1016067079], length 0
0x0000: 0000 0000 0000 0000 0000 0000 0800 4500 ..............E.
0x0010: 0034 7fe3 4000 4006 bcde 7f00 0001 7f00 .4..@.@.........
0x0020: 0001 de52 000d b0d4 0824 3da9 0c07 8010 ...R.....$=.....
0x0030: 0200 fe28 0000 0101 080a 3c8f f408 3c8f ...(......<...<.
0x0040: f407 ..
13:51:26.547398 IP (tos 0x0, ttl 64, id 32815, offset 0, flags [DF], proto TCP (6), length 78)
127.0.0.1.13 > 127.0.0.1.56914: Flags [P.], cksum 0xfe42 (incorrect -> 0x16bc), seq 1:27, ack 1, win 512, options [nop,nop,TS val 1016067080 ecr 1016067080], length 26
0x0000: 0000 0000 0000 0000 0000 0000 0800 4500 ..............E.
0x0010: 004e 802f 4000 4006 bc78 7f00 0001 7f00 .N./@[email protected]......
0x0020: 0001 000d de52 3da9 0c07 b0d4 0824 8018 .....R=......$..
0x0030: 0200 fe42 0000 0101 080a 3c8f f408 3c8f ...B......<...<.
0x0040: f408 5475 6520 4d61 7920 3331 2031 333a ..Tue.May.31.13:
0x0050: 3531 3a32 3620 3230 3232 0d0a 51:26.2022..
13:51:26.549227 IP (tos 0x0, ttl 64, id 32740, offset 0, flags [DF], proto TCP (6), length 52)
127.0.0.1.56914 > 127.0.0.1.13: Flags [.], cksum 0xfe28 (incorrect -> 0x3466), seq 1, ack 27, win 512, options [nop,nop,TS val 1016067082 ecr 1016067080], length 0
0x0000: 0000 0000 0000 0000 0000 0000 0800 4500 ..............E.
0x0010: 0034 7fe4 4000 4006 bcdd 7f00 0001 7f00 .4..@.@.........
0x0020: 0001 de52 000d b0d4 0824 3da9 0c21 8010 ...R.....$=..!..
0x0030: 0200 fe28 0000 0101 080a 3c8f f40a 3c8f ...(......<...<.
0x0040: f408 ..
13:51:26.550707 IP (tos 0x0, ttl 64, id 32741, offset 0, flags [DF], proto TCP (6), length 52)
127.0.0.1.56914 > 127.0.0.1.13: Flags [F.], cksum 0xfe28 (incorrect -> 0x3463), seq 1, ack 28, win 512, options [nop,nop,TS val 1016067083 ecr 1016067080], length 0
0x0000: 0000 0000 0000 0000 0000 0000 0800 4500 ..............E.
0x0010: 0034 7fe5 4000 4006 bcdc 7f00 0001 7f00 .4..@.@.........
0x0020: 0001 de52 000d b0d4 0824 3da9 0c22 8011 ...R.....$=.."..
0x0030: 0200 fe28 0000 0101 080a 3c8f f40b 3c8f ...(......<...<.
0x0040: f408 ..
4) 分析
三次握手
连接终止