常用小工具
netstat
提供IP 地址和端口使用的情况,以及各个 TCP 连接的状态
linux命令:netstat [-acCeFghilMnNoprstuvVwx][-A<网络类型>][--ip]
- -a 显示所有的网络连接,包括TCP, UDP, ICMP等, 状态包括ESTABLISHED, TIME_WAIT, LISTEN
- -l或–listening 只显示处于LISTEN状态的socket, 与-a同时使用会被-a覆盖
- -n或–numberic 直接使用ip地址,而不通过域名服务器
- -o或–timers 显示计时器
- -t或–tcp 显示TCP传输协议的连接状况,只显示active(ESTABLISHED)连接
- -u 显示UDP传输协议的网络链接情况.只显示active(ESTABLISHED)连接
- -p或–programs 显示正在使用socket的程序识别码或程序名称
- -A<网络类型>或–<网络类型> 列出该网络类型连线中的相关地址
- –ip或–inet 此参数的效果和指定"-A inet"参数相同。
举例: 查看IPV4端口上的tcp的监听 netstat -lntp --inet
socket的11种状态:
- 包括TCP三次握手的五种状态和四次挥手的6种状态, 如
- LISTEN: 表示服务器端的某个SOCKET处于监听状态,可以接受客户端的连接
- ESTABLISHED:表示TCP连接已经成功建立,开始传输数据
- TIME_WAIT:该状态是最常见的状态,主动方在收到对方FIN后,就由FIN_WAIT_2状态进入到TIME_WAIT状态
详见
lsof
找出在指定的 IP 地址或者端口上打开套接字的进程
lsof -i :8080
: 找出使用 8080 端口的那个进程
nmap
用法nmap ip -p port
- open, 应用程序在该端口接收 TCP 连接或者 UDP 报文。
- filtered, 代表被防火墙过滤
详见
strace
Linux上的一个程序,该程序可以追踪并记录参数后边运行的进程对内核进行了哪些系统调用.
telnet
telnet程序是基于TELNET协议的远程登录客户端程序。Telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。在终端使用者的电脑上使用telnet程序,用它连接到服务器。终端使用者可以在telnet程序中输入命令,这些命令会在服务器上运行,就像直接在服务器的控制台上输入一样。可以在本地就能控制服务器。要开始一个 telnet会话,必须输入用户名和密码来登录服务器。Telnet是常用的远程控制Web服务器的方法。
如果一个服务程序对外开启了侦听服务,我们都可以使用 telnet ip port 来连接上去, 如果不指定端口号,telnet 会使用默认 23 号端口,如telnet 120.55.94.78 8888
, 如此可以通过 telnet 命令去检测指定 ip 地址和端口号的侦听服务是否存在.
lsof
lsof 命令是 Linux 系统的扩展工具,它的含义是 list opened filedesciptor (列出已经打开的文件描述符),在 Linux 系统中,所有的与资源句柄相关的东西都可以统一抽象成文件描述符(filedescriptor,简称 fd)。一个文件句柄是一个 fd,一个 socket 对象也可以称之为 fd 等等.
lsof -i
只显示TYPE为网络连接的条目,如ipv4lsof -p pid
指定进程idlsof -Pni
显示网络连接的ip地址和端口号
nc
netcat 命令, nc 命令常见的用法是模拟一个服务器程序被其他客户端连接,或者模拟一个客户端连接其他服务器,连接之后就可以进行数据收发.
-
模拟服务器:
nc -v -l 127.0.0.1 6000
: 模拟一个服务器,只可本地连接, 端口6000
nc -v -l 0.0.0.0 6000
: 模拟一个外网可连接的服务器, 端口6000 -
模拟客户端
nc -v www.baidu.com 80
: 模拟一个客户端,连接远程服务器+端口
nc -v -p 5555 www.baidu.com 80
: 模拟一个客户端,-p
指定客户端的使用哪个端口连接服务器
tcpdump
Linux 系统提供的一个非常强大的抓包工具, 常见选项如下
-i
指定要捕获的目标网卡名,网卡名可以使用前面章节中介绍的 ifconfig 命令获得;如果要抓所有网卡上的包,可以使用 any 关键字.
## 抓取网卡ens33上的包
tcpdump -i ens33
## 抓取所有网卡上的包
tcpdump -i any
-X
以 ASCII 和十六进制的形式输出捕获的数据包内容,减去链路层的包头信息;-XX 以 ASCII 和十六进制的形式输出捕获的数据包内容,包括链路层的包头信息-n
不要将 ip 地址显示成别名的形式;-nn 不要将 ip 地址和端口以别名的形式显示-S
以绝对值显示包的 ISN 号(包序列号),默认以上一包的偏移量显示-vv
抓包的信息详细地显示;-vvv
抓包的信息更详细地显示-w
将抓取的包的原始信息(不解析,也不输出)写入文件中,后跟文件名:tcpdump -i any -w filename
-r
从利用 -w 选项保存的包文件中读取数据包信息
## 仅显示经过端口 8888 上的数据包(包括tcp:8888和udp:8888)
tcpdump -i any 'port 8888'
## 仅显示经过端口是 tcp:8888 上的数据包
tcpdump -i any 'tcp port 8888'
## 仅显示从源端口是 tcp:8888 的数据包
tcpdump -i any 'tcp src port 8888'
## 仅显示源端口是 tcp:8888 或目标端口是 udp:9999 的包
tcpdump -i any 'tcp src port 8888 or udp dst port 9999'
## 仅显示地址是127.0.0.1 且源端口是 tcp:9999 的包 ,以 ASCII 和十六进制显示详细输出,
## 不显示 ip 地址和端口号的别名
tcpdump -i any 'src host 127.0.0.1 and tcp src port 9999' -XX -nn -vv