总体流程:
- 检查ip是否ping通
- 检查port是否开放
- 发送API请求,检查是否请求成功
- 注意报文,注意返回的是json还是String
1.检查ip
通讯双方系统都要在白名单上添加对方系统的公网出口ip,用一下命令查看公网出口ip
curl cip.cc
1.1ip访问
使用ping命令验证网络是否打通
ping ip
1.2域名访问
若对方系统是需要用域名访问,则要分清是该域名是注册在公网还是内网
若注册在公网,该域名可被DNS服务器解析,所以可以使用ping命令验证网络
ping hostname
若注册在内网,则需要先在调用服务器的hosts文件上添加被调用服务器的ip和域名,然后就可以ping该域名了
vim /etc/hosts
ping hostname
2.检查port
使用telnet检查端口是否开放。若调用的系统给的是 域名 进行访问,则这一步可以跳过,直接到下一步
telnet ip port
若成功,则返回如下结果
3.发送请求
根据接口地址,我们使用curl命令做请求
curl 接口地址 #get请求
curl -X post -ikv 接口地址 #post请求,i:显示响应头信息,k:允许不带证书连接到SSL,v:显示http通信的全流程
若需要附请求带参数进行请求,我们可以借助postman生成curl语句。填写好请求参数,再点击 </>
这个按钮就可生成(注意:使用生成的命令的时候要将 –date-raw 替换成 -d)
4.检查报文
服务响应的报文有可能是json也有可能是json转成了string,这点我们要十分注意。我们其实可以使用curl -i 看到响应报文的信息。如:
这个响应体看着像是json,但是我们看到响应头,Content-Type: text/plain; charset=UFT-8
这里妥妥的写着是字符串类型,所以我们接收的时候也要注意,不要被表面现象所迷惑
5.额外技巧
5.1 查看当前服务器哪些端口对外开发(netstat)
netstat [选项]
选项:
-a或--all:显示所有连线中的Socket;
-c或--continuous:持续列出网络状态;
-l或--listening:显示监控中的服务器的Socket;
-n或--numeric:直接使用ip地址,而不通过域名服务器;
-p或--programs:显示正在使用Socket的程序识别码和程序名称;
-t或--tcp:显示TCP传输协议的连线状况;
-u或--udp:显示UDP传输协议的连线状况;
以上仅展示常用的参数,更详细的参数请看这里:https://blog.csdn.net/qq_42014600/article/details/90372315
使用示例:
- 显示所有监听中的tcp socket
netstat -tl
- 显示所有监听中的tcp socket,但使用ip展示,而不是域名
netstat -tnl
- 用ip显示所有监听中的tcp socket,并附带pid和程序名
netstat -tnlp
5.2 linux抓包(tcpdump)
tcpdump是linux自带的一个抓包命令,他是可以抓取数据链路层、网络层(IP)、传输层(TCP、UDP)的数据
tcpdump [表达式] [选项]
表达式:
1.协议关键字:
tcp、udp、icmp、ip、ip6、arp
2.数据关键字
host:过滤ip。 host 14.119.104.189
net:网段过滤。 net 192.168.10.0/24
port:过滤端口。 port 80
3.方向关键字
src:过滤源ip。 src 14.119.104.189
dst:过滤目的ip。 dst 14.119.104.189
4.逻辑关键字
and、or、not(!)
选项:
-i 网卡名:指定监听网络接口,默认监听第一个接口
-n:不把ip转化成域名,直接显示 ip
-nn:不把协议和端口号转化成名字
- 抓到包后直接显示ip
tcpdump -n
- 抓到包后,直接显示ip和端口
tcpdump -nn