Linux Socket tcpdump/wireshark 只能捕获三次挥手
来源:互联网 发布:cpda数据分析师 编辑:程序博客网 时间:2024/05/16 13:05
Wireshark:
由于监听本地回环,速度太快, 导致服务器收到FIN以后, 调用close的时候, 清除了socket缓存里ACK应答,.所以导致现在出现的情况
解决方法:
只要服务器收到FIN后,休眠一点时间再调用close,那么就能通过tcpdump/wireshark看到完整的四次挥手消息.
Tcpdump:
无法观察到客户端发送的FIN分节,可能是由于行缓冲影响(个人愚见), 将输出重定向至文件,则可观察到完整的TCP三次握手,四次挥手。
/*************************************************************************> File Name: server.c> Author: lzgabel> Mail: lz19960321lz@163.com> Function: > Remark: > Created Time: 2017年08月14日 星期一 09时38分35秒 ************************************************************************/#include <stdio.h>#include <unistd.h>#include <stdlib.h>#include <strings.h>#include <string.h>#include <sys/socket.h>#include <arpa/inet.h>#include <netinet/in.h>#define PORT 14250intmain(int argc,char *argv[]){ int listenfd, connfd; char buf[BUFSIZ]; time_t ticks; socklen_t length; struct sockaddr_in server_addr, client_addr; listenfd = socket(AF_INET, SOCK_STREAM, 0); bzero(&server_addr, sizeof(server_addr)); server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = htonl(INADDR_ANY); server_addr.sin_port = htons(PORT); bind(listenfd, (struct sockaddr *) &server_addr, sizeof(server_addr)); listen(listenfd, 5); for ( ;; ) { length = sizeof(client_addr); connfd = accept(listenfd, (struct sockaddr *)&client_addr, &length); //sleep(2); recv(connfd, buf, sizeof(buf), 0); printf("recv : %s\n", buf); close(connfd); } close(listenfd);}
/*************************************************************************> File Name: client.c> Author: lzgabel> Mail: lz19960321lz@163.com> Function: > Remark: > Created Time: 2017年08月14日 星期一 20时47分53秒 ************************************************************************/#include "unpipc.h"#include <unistd.h>#include <sys/socket.h>#include <stdio.h>#include <stdlib.h>#include <arpa/inet.h>#include <netinet/in.h>#include <strings.h>#define PORT 14250intmain(int argc,char *argv[]){ int sockfd; char ipAddress[INET_ADDRSTRLEN]; struct sockaddr_in server_addr; struct sockaddr_in client_addr; sockfd = socket(AF_INET, SOCK_STREAM, 0); bzero(&server_addr, sizeof(server_addr)); server_addr.sin_family = AF_INET; server_addr.sin_port = htons(PORT); if( argc < 2 ) { printf("Usage: ./client 127.0.0.1\n"); exit(EXIT_FAILURE); } if (inet_pton(AF_INET, argv[1], &server_addr.sin_addr) == -1) { perror("server address error"); exit(EXIT_FAILURE); } connect(sockfd, (struct sockaddr *) &server_addr, sizeof(server_addr)); char *buffer = "wojiushishi"; send(sockfd, buffer, strlen(buffer), 0); close(sockfd);}
阅读全文
0 0
- Linux Socket tcpdump/wireshark 只能捕获三次挥手
- socket之三次握手和四次挥手 wireshark解析
- Linux TcpDump Wireshark文件导出
- wireshark抓包图解 TCP三次握手/四次挥手详解
- wireshark抓包图解 TCP三次握手/四次挥手详解
- wireshark抓包图解 TCP三次握手/四次挥手详解
- wireshark抓包图解 TCP三次握手/四次挥手详解
- wireshark抓包图解 TCP三次握手/四次挥手详解
- wireshark抓包图解 TCP三次握手/四次挥手详解
- wireshark抓包图解 TCP三次握手/四次挥手详解
- wireshark抓包图解 TCP三次握手/四次挥手详解
- wireshark抓包图解 TCP三次握手/四次挥手详解
- wireshark抓包图解 TCP三次握手/四次挥手详解
- wireshark抓包图解 TCP三次握手/四次挥手详解
- wireshark抓包图解 TCP三次握手/四次挥手详解
- wireshark抓包图解 TCP三次握手/四次挥手详解
- wireshark抓包图解 TCP三次握手/四次挥手详解
- wireshark抓包图解 TCP三次握手/四次挥手详解
- 解决 unity android下设置分辨率闪屏问题
- 全排列实现(递归实现深度优先搜索)
- 初学JAVA03
- 使用Linux的namespace来隔离system的教程
- 活久见,用Excel制作条形码
- Linux Socket tcpdump/wireshark 只能捕获三次挥手
- 网络判断是否打开
- imx6q调试android7问题Unrecognized filesystem type Bad Linux ARM zImage magic!
- [P3817]小A的糖果
- Ajax success()回调函数中用html()函数动态添加内容
- C# datatable用法总结
- 解决IE中无法用jquery解析xml使用find的问题
- 堆排序和归并排序
- cuda实践之sobel边缘检测实现