日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

实战tcpdump看RST

發(fā)布時間:2025/6/15 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 实战tcpdump看RST 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

??強(qiáng)烈推薦人工智能學(xué)習(xí)網(wǎng)站??? ? ? ? ? ? ?

RST為重置報文段,它會導(dǎo)致TCP連接的快速拆遷,且不需要ack進(jìn)行確認(rèn)。

1.針對不存在的端口的連請求

客戶端:

?

#include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <netdb.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #include <errno.h> #include <malloc.h> #include <netinet/in.h> #include <arpa/inet.h> #include <sys/ioctl.h> #include <stdarg.h> #include <fcntl.h> #include <sys/types.h> #include <sys/wait.h> #include <netinet/in.h> #include <arpa/inet.h> #include <signal.h> #include <netinet/tcp.h> #define MAXLINE 4096int main() {int sockfd,ret;struct sockaddr_in servaddr;char sendbuf[32740]={0};sockfd=socket(AF_INET,SOCK_STREAM,0);bzero(&servaddr,sizeof(servaddr));servaddr.sin_family=AF_INET;servaddr.sin_port=htons(8888);servaddr.sin_addr.s_addr = inet_addr("127.0.0.1");ret=connect(sockfd,(struct sockaddr *)&servaddr,sizeof(servaddr));printf("ret=%d\n",ret);write(sockfd,sendbuf,sizeof(sendbuf)+1);getchar();close(sockfd);return 0; }

?

編譯并運(yùn)行,此時沒有服務(wù)端在8888端口進(jìn)行監(jiān)聽,tcpdump抓包看。

?

07:19:32.643476 IP 127.0.0.1.49028 > 127.0.0.1.ddi-tcp-1: Flags [S], seq 1270070893, win 65495, options [mss 65495,sackOK,TS val 3883769366 ecr 0,nop,wscale 7], length 0 07:19:32.643491 IP 127.0.0.1.ddi-tcp-1 > 127.0.0.1.49028: Flags [R.], seq 0, ack 1270070894, win 0, length 0

客戶端發(fā)起連接,但受到一個RST包。

?

?

2.請求超時

因為客戶端可以設(shè)置接收數(shù)據(jù)的超時時間,當(dāng)客戶端調(diào)用connect函數(shù)發(fā)送SYN時,由于客戶端收到服務(wù)端的SYN/ACK的時間超過了客戶端設(shè)置的等待時間,造成接收超時。當(dāng)服務(wù)端的SYN/ACK到達(dá)時,客戶端回應(yīng)RST。

?

3.提前關(guān)閉

服務(wù)端:

?

#include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <netdb.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #include <errno.h> #include <malloc.h> #include <netinet/in.h> #include <arpa/inet.h> #include <sys/ioctl.h> #include <stdarg.h> #include <fcntl.h> #include <sys/types.h> #include <sys/wait.h> #include <netinet/in.h> #include <arpa/inet.h> #include <signal.h> #define MAXLINE 4096int main() {int listenfd,acceptfd,n;socklen_t clilen;char recvbuf[100]={0};struct sockaddr_in cliaddr,servaddr;listenfd=socket(AF_INET,SOCK_STREAM,0);servaddr.sin_family=AF_INET;servaddr.sin_port=htons(8888);servaddr.sin_addr.s_addr = INADDR_ANY; bind(listenfd,(struct sockaddr *)&servaddr,sizeof(struct sockaddr_in));listen(listenfd,5);clilen=sizeof(cliaddr);acceptfd=accept(listenfd,(struct sockaddr *)&cliaddr,&clilen);n=recv(acceptfd,recvbuf,sizeof(recvbuf)-1,0);printf("n=%d\n",n); getchar();close(acceptfd);close(listenfd);return 0; }

?

客戶端:

?

#include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <netdb.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #include <errno.h> #include <malloc.h> #include <netinet/in.h> #include <arpa/inet.h> #include <sys/ioctl.h> #include <stdarg.h> #include <fcntl.h> #include <sys/types.h> #include <sys/wait.h> #include <netinet/in.h> #include <arpa/inet.h> #include <signal.h> #include <netinet/tcp.h> #define MAXLINE 4096int main() {int sockfd,ret;struct sockaddr_in servaddr;char sendbuf[1000]={0};sockfd=socket(AF_INET,SOCK_STREAM,0);bzero(&servaddr,sizeof(servaddr));servaddr.sin_family=AF_INET;servaddr.sin_port=htons(8888);servaddr.sin_addr.s_addr = inet_addr("127.0.0.1");ret=connect(sockfd,(struct sockaddr *)&servaddr,sizeof(servaddr));printf("ret=%d\n",ret);write(sockfd,sendbuf,sizeof(sendbuf)+1);getchar();close(sockfd);return 0; }

?

先啟動服務(wù)端,再啟動客戶端。客戶端每次發(fā)送1001個字節(jié),而服務(wù)端只接收了99個字節(jié),還有剩下的字節(jié)在接收緩沖區(qū)里面。此時先關(guān)閉服務(wù)端,用tcpdump抓包查看。

?

16:28:06.149336 IP 127.0.0.1.49192 > 127.0.0.1.ddi-tcp-1: Flags [S], seq 3096824100, win 65495, options [mss 65495,sackOK,TS val 3916682872 ecr 0,nop,wscale 7], length 0 16:28:06.149354 IP 127.0.0.1.ddi-tcp-1 > 127.0.0.1.49192: Flags [S.], seq 1491431840, ack 3096824101, win 65483, options [mss 65495,sackOK,TS val 3916682872 ecr 3916682872,nop,wscale 7], length 0 16:28:06.149372 IP 127.0.0.1.49192 > 127.0.0.1.ddi-tcp-1: Flags [.], ack 1, win 512, options [nop,nop,TS val 3916682872 ecr 3916682872], length 0 16:28:06.149461 IP 127.0.0.1.49192 > 127.0.0.1.ddi-tcp-1: Flags [P.], seq 1:1002, ack 1, win 512, options [nop,nop,TS val 3916682872 ecr 3916682872], length 1001 16:28:06.149491 IP 127.0.0.1.ddi-tcp-1 > 127.0.0.1.49192: Flags [.], ack 1002, win 528, options [nop,nop,TS val 3916682872 ecr 3916682872], length 0 16:28:07.699933 IP 127.0.0.1.ddi-tcp-1 > 127.0.0.1.49192: Flags [R.], seq 1, ack 1002, win 528, options [nop,nop,TS val 3916684423 ecr 3916682872], length 0

服務(wù)端沒有將數(shù)據(jù)全部接收完成,然后就關(guān)閉了,所以服務(wù)端產(chǎn)生了一個RST。
?

?

4.在一個已關(guān)閉的socket上發(fā)到數(shù)據(jù)

?

#include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <netdb.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #include <errno.h> #include <malloc.h> #include <netinet/in.h> #include <arpa/inet.h> #include <sys/ioctl.h> #include <stdarg.h> #include <fcntl.h> #include <sys/types.h> #include <sys/wait.h> #include <netinet/in.h> #include <arpa/inet.h> #include <signal.h> #define MAXLINE 4096int main() {int listenfd,acceptfd,n;socklen_t clilen;char recvbuf[100]={0};struct sockaddr_in cliaddr,servaddr;listenfd=socket(AF_INET,SOCK_STREAM,0);servaddr.sin_family=AF_INET;servaddr.sin_port=htons(8888);servaddr.sin_addr.s_addr = INADDR_ANY; bind(listenfd,(struct sockaddr *)&servaddr,sizeof(struct sockaddr_in));listen(listenfd,5);clilen=sizeof(cliaddr);acceptfd=accept(listenfd,(struct sockaddr *)&cliaddr,&clilen);getchar();close(acceptfd);close(listenfd);return 0; }

?

服務(wù)端:

?

#include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <netdb.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #include <errno.h> #include <malloc.h> #include <netinet/in.h> #include <arpa/inet.h> #include <sys/ioctl.h> #include <stdarg.h> #include <fcntl.h> #include <sys/types.h> #include <sys/wait.h> #include <netinet/in.h> #include <arpa/inet.h> #include <signal.h> #include <netinet/tcp.h> #define MAXLINE 4096int main() {int sockfd,ret;struct sockaddr_in servaddr;char sendbuf[1000]={0};sockfd=socket(AF_INET,SOCK_STREAM,0);bzero(&servaddr,sizeof(servaddr));servaddr.sin_family=AF_INET;servaddr.sin_port=htons(8888);servaddr.sin_addr.s_addr = inet_addr("127.0.0.1");ret=connect(sockfd,(struct sockaddr *)&servaddr,sizeof(servaddr));printf("ret=%d\n",ret);getchar();write(sockfd,sendbuf,sizeof(sendbuf)+1);getchar();close(sockfd);return 0; }


先打開服務(wù)端,在打開客戶端。然后關(guān)閉服務(wù)端,在客戶端按下回車鍵鍵,用tcpdump抓包查看結(jié)果。

?

?

16:44:16.226353 IP 127.0.0.1.49194 > 127.0.0.1.ddi-tcp-1: Flags [S], seq 3249455833, win 65495, options [mss 65495,sackOK,TS val 3917652949 ecr 0,nop,wscale 7], length 0 16:44:16.226370 IP 127.0.0.1.ddi-tcp-1 > 127.0.0.1.49194: Flags [S.], seq 1092997986, ack 3249455834, win 65483, options [mss 65495,sackOK,TS val 3917652949 ecr 3917652949,nop,wscale 7], length 0 16:44:16.226387 IP 127.0.0.1.49194 > 127.0.0.1.ddi-tcp-1: Flags [.], ack 1, win 512, options [nop,nop,TS val 3917652949 ecr 3917652949], length 0 16:44:18.402946 IP 127.0.0.1.ddi-tcp-1 > 127.0.0.1.49194: Flags [F.], seq 1, ack 1, win 512, options [nop,nop,TS val 3917655126 ecr 3917652949], length 0 16:44:18.403887 IP 127.0.0.1.49194 > 127.0.0.1.ddi-tcp-1: Flags [.], ack 2, win 512, options [nop,nop,TS val 3917655127 ecr 3917655126], length 0 16:44:20.376861 IP 127.0.0.1.49194 > 127.0.0.1.ddi-tcp-1: Flags [P.], seq 1:1002, ack 2, win 512, options [nop,nop,TS val 3917657100 ecr 3917655126], length 1001 16:44:20.376874 IP 127.0.0.1.ddi-tcp-1 > 127.0.0.1.49194: Flags [R], seq 1092997988, win 0, length 0

客戶端和服務(wù)端建立連接之后,服務(wù)端就關(guān)閉了。此時客戶端再向服務(wù)端發(fā)送數(shù)據(jù),此時服務(wù)端返回RST。

?

?

?

?

參考地址:http://www.360doc.com/content/13/0702/10/1073512_297069771.shtml
?

?

?

?

?

?

?

?

?

?

?

?

?

總結(jié)

以上是生活随笔為你收集整理的实战tcpdump看RST的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。