复习——网络测试工具

网络测试工具

一、常用网络测试工具详解

1. telnet - 远程登录测试

复制代码
# 测试端口连通性
telnet 192.168.1.1 8888
telnet www.example.com 80

# 如果没有指定端口,默认使用23端口(远程登录)

作用:测试TCP端口是否开放,验证服务是否可达

2. netstat - 网络状态查看

复制代码
# 查看所有网络连接
netstat -anp

# 按协议查看
netstat -n -t      # 仅TCP连接
netstat -n -u      # 仅UDP连接

# 查看监听端口
netstat -lnp | grep 8888

# 查看网络接口统计
netstat -n -i

常用选项

  • -a:显示所有连接

  • -n:以数字形式显示

  • -p:显示进程信息

  • -l:仅显示监听端口

  • -t:TCP协议

  • -u:UDP协议

3. ping - 网络连通性测试

复制代码
# 测试IP连通性
ping 192.168.1.1

# 测试域名解析
ping www.baidu.com

# 限制ping包数量
ping -c 4 192.168.1.1

# 指定数据包大小
ping -s 1024 192.168.1.1

原理:发送ICMP Echo Request,等待ICMP Echo Reply

4. arp - 地址解析协议

复制代码
# 查看ARP缓存表
arp -an

# 删除ARP条目
arp -d 192.168.1.100

# 添加静态ARP条目
arp -s 192.168.1.100 00:11:22:33:44:55

作用:IP地址 ↔ MAC地址映射

5. 抓包分析工具

5.1 Wireshark(图形化)

过滤规则语法

复制代码
# IP地址过滤
ip.src == 192.168.1.100
ip.dst == 192.168.1.200
ip.addr == 192.168.1.100

# 端口过滤
tcp.port == 80
udp.port == 53
tcp.srcport == 8080
tcp.dstport == 8080

# 协议过滤
tcp
udp
icmp
http

# 组合过滤
ip.src == 192.168.1.100 and tcp.port == 8080
ip.addr == 192.168.1.100 or ip.addr == 192.168.1.200

# 简写
tcp host 192.168.1.100
5.2 tcpdump(命令行)
复制代码
# 基本抓包
tcpdump -n

# 指定网卡
tcpdump -i eth0
tcpdump -i lo        # 本地回环

# 过滤IP
tcpdump -n src 192.168.1.100
tcpdump -n dst 192.168.1.200
tcpdump -n host 192.168.1.100

# 过滤端口
tcpdump -n port 80
tcpdump -n src port 8080
tcpdump -n dst port 8080

# 过滤协议
tcpdump -n tcp
tcpdump -n udp
tcpdump -n icmp

# 显示详细内容
tcpdump -n -X         # 十六进制+ASCII
tcpdump -n -XX        # 更详细的十六进制
tcpdump -n -A         # ASCII格式
tcpdump -n -v         # 详细信息
tcpdump -n -vv        # 更详细信息

# 组合过滤
tcpdump -n 'src 192.168.1.100 and dst port 80'
tcpdump -n 'tcp port 8080 or udp port 53'

# 保存到文件
tcpdump -n -w capture.pcap
tcpdump -n -r capture.pcap   # 读取文件

# 高级示例
sudo tcpdump -n -i eth0 -xx src or dst www.taobao.com -AXX -vv | less

二、TCP连接管理

1. 三次握手(建立连接)

复制代码
客户端                            服务器
  |                                  |
  |--- SYN=1, seq=x ---------------->|
  |        (connect()调用)            |
  |                                  |
  |<--- SYN=1, ACK=1, seq=y, ack=x+1-|
  |        (listen()准备,accept()等待)|
  |                                  |
  |--- ACK=1, seq=x+1, ack=y+1 ---->|
  |                                  |
  连接建立                           连接建立

代码体现

  • 客户端:connect() 触发第一次SYN

  • 服务器:listen() 准备接受连接,accept() 等待完成握手

2. 四次挥手(断开连接)

复制代码
客户端                            服务器
  |                                  |
  |--- FIN=1, seq=u ---------------->|   # 第1次:主动关闭
  |        (close()调用)              |
  |                                  |
  |<--- ACK=1, seq=v, ack=u+1 ------|   # 第2次:确认
  |     (半关闭状态)                  |
  |                                  |
  |<--- FIN=1, ACK=1, seq=w, ack=u+1-|   # 第3次:被动关闭
  |                                  |
  |--- ACK=1, seq=u+1, ack=w+1 ---->|   # 第4次:确认
  |                                  |
  连接关闭                           连接关闭

代码体现 :任何一方调用 close() 都会触发挥手过程

3. 抓包验证

复制代码
# 验证三次握手
tcpdump -n -i lo tcp port 9999

# 应该看到:
# S  - SYN(第一次)
# S. - SYN+ACK(第二次)
# .  - ACK(第三次)

三、TCP编程基础

服务器端流程

复制代码
// 1. 创建socket
int sockfd = socket(AF_INET, SOCK_STREAM, 0);

// 2. 设置地址重用
int on = 1;
setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));

// 3. 绑定地址
struct sockaddr_in serv_addr;
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(8888);
serv_addr.sin_addr.s_addr = INADDR_ANY;
bind(sockfd, (struct sockaddr*)&serv_addr, sizeof(serv_addr));

// 4. 监听
listen(sockfd, 128);

// 5. 接受连接
struct sockaddr_in cli_addr;
socklen_t cli_len = sizeof(cli_addr);
int connfd = accept(sockfd, (struct sockaddr*)&cli_addr, &cli_len);

// 6. 通信
char buffer[1024];
recv(connfd, buffer, sizeof(buffer), 0);
send(connfd, buffer, strlen(buffer), 0);

// 7. 关闭
close(connfd);
close(sockfd);

客户端流程

复制代码
// 1. 创建socket
int sockfd = socket(AF_INET, SOCK_STREAM, 0);

// 2. 连接服务器
struct sockaddr_in serv_addr;
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(8888);
serv_addr.sin_addr.s_addr = inet_addr("192.168.1.100");
connect(sockfd, (struct sockaddr*)&serv_addr, sizeof(serv_addr));

// 3. 通信
send(sockfd, "Hello", 5, 0);
recv(sockfd, buffer, sizeof(buffer), 0);

// 4. 关闭
close(sockfd);

四、实用命令总结

功能 命令 说明
端口测试 telnet IP 端口 测试TCP端口
连接查看 `netstat -anp grep 端口`
抓包分析 tcpdump -n port 端口 命令行抓包
图形抓包 wireshark 图形化分析
连通测试 ping IP ICMP连通性
路由跟踪 traceroute IP 路由路径
域名解析 nslookup 域名 DNS查询
网络配置 ifconfigip addr 查看网络接口

五、注意事项

  1. 权限问题:tcpdump和netstat查看详细信息需要sudo权限

  2. 生产环境:谨慎使用网络测试工具,避免影响正常业务

  3. 防火墙:测试时注意防火墙设置,可能导致连接失败

  4. 协议版本:注意IPv4和IPv6的区别

  5. 性能影响:抓包会影响网络性能,测试环境使用

相关推荐
菩提小狗2 小时前
【小迪安全】web安全|渗透测试|网络安全|SRC挖掘|学习笔记|2021|
学习·安全·web安全
qq_406176142 小时前
JavaScript的同步与异步
前端·网络·tcp/ip·ajax·okhttp
Felven2 小时前
C. Contrast Value
c语言·开发语言·算法
colus_SEU2 小时前
【计算机网络笔记】第三章 传输层
网络·笔记·计算机网络
知识分享小能手2 小时前
Ubuntu入门学习教程,从入门到精通,Ubuntu 22.04 系统启动与关闭详解(11)
linux·学习·ubuntu
对方正在长头发丿2 小时前
Numpy学习篇
python·学习·jupyter·pycharm·numpy
machunlin~2 小时前
centos 系统安装相关
linux·运维·docker·centos
hweiyu002 小时前
Linux 命令:bzip2
linux·运维·服务器
不染尘.2 小时前
应用层之HTTP
服务器·网络·网络协议·计算机网络·http