一、前言
为什么要写这个东西呢?怎么涉及到甩锅呢?说白了就是在各种对接过程中,总会遇到一些喜欢甩锅的人,说是你的问题,什么网络没毛病,是你的接口什么的不对,总之就是你的问题~ 这时候什么最爽? 一堆数据加截图打脸上细声慢语说自己错了才是(滑稽
二、网络排查
虽然说爽,但是基础的问题好好沟通就好,所以还是需要定位一些简单的问题内容
1、ping
基础的连通性测试,这个应该不必多说
2、telnet
用于测试双方的端口连通性,可以考虑从A到B和B到A都试一次
#参数内容 ip ip地址 、 port 端口号呀 telnet {{ip}} {{port}}
Tips: 值得注意的是,如果是windows系统,可能需要手动操作
以下是开启Telnet服务的步骤:
2.1、 打开控制面板:点击“开始”菜单,在搜索栏中输入“控制面板”,然后点击打开。
2.2、 安装Telnet客户端:在控制面板中选择“程序”,然后点击“启用或关闭Windows功能”,在弹出的对话框中找到“Telnet客户端”,勾选它,然后点击“确定”按钮。
3、check firewall
检查防火墙也是一个基操,避免说你怎么不关注下防火墙问题(ps:虽然这个应该也是早期沟通需要让其开放的内容之一)
linux:
这个主要是两个防火墙比较多,再多的话可能要咨询管理员,也就是超出本次范围的基本排插咯
(1)iptables
当然第一步看是否开启:
sudo systemctl status firewalld
通过
iptables -L
可以轻松查看所需的端口对所需的主机是否开启可以直接通过
sudo nano /etc/sysconfig/iptables
操作的,更新完后记得
sudo nano /etc/sysconfig/iptables
让配置生效
#参数内存 protocol: tcp/udp两个协议选其一、 port:端口号
#若为配置文件配置时,通常只有1、2两个编号的规则,删除前面的命令 iptables 即可
#1、为全部 特定协议(tcp/udp)开放特定端口
iptables -A INPUT -p {{protocol}} --dport {{port}} -j ACCEPT
#2、特定ip 设定
iptables -A INPUT -p {{protocol}} --dport {{port}} -j ACCEPT -s {{ip}}
#3、删除特定编号的内容,比如所需删除的规则通过 -L查出来了,可以根据编号删除
iptables -D INPUT 2
#4、爆破玩法,删除所有规则
iptables -F
不过建议在编辑之前备份一下
iptables-save > /path/to/backup/file
#上述命令将现有的iptables规则保存到指定文件中,可以在需要恢复时使用以下命令:
iptables-restore < /path/to/backup/file
(2)firewalld
查看状态
sudo systemctl status iptables
通过
firewall-cmd --list-all
的rich rules可以查看所需的端口对所需的主机是否开启,可以直接通过
sudo nano /etc/firewalld/firewalld.conf
操作的,更新完后记得
sudo firewall-cmd --reload
让配置生效
#参数内存 protocol: tcp/udp两个协议选其一、 port:端口号
#这部分内容,我还是觉得使用命令比较合适,当然也可以修改配置 FirewallDialect=iptables 来直接走iptables那套规矩
#增加一条内容
sudo firewall-cmd --add-port={{port}}/{{protocol}} --permanent
#删除一条内容
sudo firewall-cmd --remove-port={{port}}/{{protocol}} --permanent
#备份内容
sudo firewall-cmd --direct --get-all-rules > ./firewalld_rules
windows:
以下是在Windows Server系统中设置防火墙的步骤:
3.1、 打开“Windows Defender防火墙”:点击“开始”菜单,在搜索栏中输入“Windows Defender防火墙”,然后点击打开。
3.2、 配置入站规则:在左侧面板中选择“高级设置”,在“入站规则”中选择“新建规则”,然后按照向导提示进行配置。常见的入站规则包括允许某个端口的流量通过、允许某个应用程序的流量通过、允许某个IP地址或IP地址段的流量通过等。
三、抓包分析
通常到这步,就是无法通过第二步来分析解决出问题,这时候,就需要抓包来操作反甩锅~ 当然也可说是说服
前置工具: wireshark (windows)、tcpdump
(1)选择监视的网卡抓包
通常单网卡的一般名称就为
eth0
,当然我们也可以通过访问的ip判断,实在不行就一个个来~
#整体上的命令
#参数内容 netcard 网卡名称、ip ip地址 、fileName 文件名
#直接监听整个网卡,偷懒也可以,但是就是折腾自己,比较容易分散目标
sudo tcpdump -i {{netcard}} -w {{fileName}}.pcap
# 特定网卡来自特定ip的数据包
sudo tcpdump -i {{netcard}} host {{ip}} -w {{fileName}}.pcap
(2) 读取解析数据包
①怎么来怎么读
# 直接读取全部内容
tcpdump -r {{fileName}}.pacp
# 过滤数据包中特定ip地址的内容,-c 数字,前N个数据包
tcpdump -r {{fileName}}.pacp host {{ip}} -c {{n}}
②利用wireshark 工具
利用刚才的文件 *.pacp ,打开
wireshark
下列的常用状态码:
- [SYN]: 表示 TCP 连接的开始标志。
- [FIN]: 表示 TCP 连接的结束标志。
- [RST]: 表示 TCP 连接已重置的标志。
- [ACK]: 表示 TCP 包确认收到数据的标志。
- [PSH]: 表示 TCP 包应立即推送到接收应用程序的标志。
- [URG]: 表示 TCP 包包含紧急数据的标志。
- [ECE]: 表示 TCP 包正在使用显式拥塞通知(ECN)机制的标志。
- [CWR]: 表示 TCP 包正在确认收到拥塞控制消息的标志。
- [ICMP]: 表示包是 Internet 控制消息协议(ICMP)包的标志。
1、例如我这里请求了一个基础的接口,是走tcp方法的
2、过滤其中的tcp/udp 流 ,通常可以右键有通用的过滤规则
1、右键所需追踪的一条数据链 —> 追踪流 —> TCP 流
2、过滤规则:(tcp流) tcp.stream eq 0
过滤出其中一条,比如time 为0.006411的
可以清晰的看到3次握手处理,然后向212.92发送一个报文内容,然后3.210就重置了请求,导致整个请求失败的一个过程。
通常我们需要在正常的环境中,过滤一次,作为参照组来表达我们的意见。
上图正是我遇到客户环境限制了http请求导致的,仅允许https的请求才可以发送内容报文