nc
用来快速构建网络链接,常用来调试客户端程序。
参数
ping
实现对网路连通性探测。给地方发送数据包,根据返回的信息初步判断目标机器是否存在或者目标机器操作系统。
在具体实现中其实使用了ICMP协议,它是一种基于IP协议的控制协议,网际控制协议,其报文格式如下:
字段含义:
- 类型:表示ICMP的类型,如果为0表示请求类型,为8表示应答
- 代码:用来查找产生错误的原因
- 校验和:检查错误的数据
- 标识符:使用标识符确认到底是谁发送的控制协议
- 序列号:唯一确定的一个报文
ping命令组装成上述的IP报文进行发送,报文目的地为ping目的地址,原地址为发送ping主机地址,然后按照ICMP的规则填写数据。随后IP报文通过ARP协议,请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址。
ping的详细参数
常用参数:
- [-l] :定义所发送数据包的大小,默认为32字节
- [-n] :定义所发数据包的次数,默认为3次
- [-t] :表示不间断向目标IP发送数据包
TTL
TTL 是 IP 协议包中的一个值,它告诉网络路由器包在网络中的时间是否太长而应被丢弃。
- TTL设置时间越长,那么缓存时间也就越长,更新也就越不容易生效。增大TTL可以节约域名解析时间从而加快网站的访问。
- 减小TTL值,减少更换空间时的不可访问时间。
返回值
- Request timed out
可能出现的情况
- 对方已经关机或者根本没有这个地址
- 可能不在同一个网段,即使通过路由也无法找到对方从而出现超时
- 对方存在但是设置了防火墙过滤
- Destination host Unreachable
- 与对方不在同一个网段且没有设置默认路由
- 网线出毛病
- Bad IP address
- 要么是IP地址不存在,要么是没有正确连接DNS服务器从而无法解析
ifconfig/ipaddr
查看服务器网卡,IP等信息
上图中被马赛克的位置假设为10.172.100.3,这样就是一个IP地址,凡是都有规则,IP地址按照小数点分割为四部分,每部分占8字节,所以IP地址为32位,那么这样的IP地址一共有多少呢
从而出现IPV6,128位
当时觉得32位很够用了,还将其分为5类,如下图所示
各类地址的主机数量:
无类型域间选路
CIDR 地址中包含标准的32位IP地址和有关网络前缀位数的信息。比如10.172.100.3/24,IP地址斜杠后面数字24,代表24位是网络号,后面八位为主机号。
计算网络号
使用IP地址和子网掩码进行AND计算得到网络号。
tcpdump
和它类似的工具在windows中是wireshark,其采用底层库winpcap/libpcap实现。采用了bpf过滤机制。
不同参数的含义:
案例
执行任务 | 执行命令 |
---|---|
捕获特定网口数据包 | tcpdump -i eth0 |
捕获特定个数(1000)的包 | tcpdump -c 1000 -i eth0 |
将捕获的包保存到文件 | tcpdump -w a.pcap -i eth0 |
读取pcap格式的包 | tcpdump -r a.pcap |
增加捕获包的时间戳 | tcpdump -n -ttt -i eth0 |
指定捕获包的协议类型 | tcpdump -i eth0 arp |
捕获指定端口 | tcpdump -i eth0 post 22 |
捕获特定目标ip+port的包 | tcpdump -i eth0 dst address and port 22 |
捕获DNS请求和响应 | tcpdump -i eth0 -s0 port 53 |
匹配Http请求头 | tcpdump -s 0 -v -n -l |
捕获特定网口数据包 | tcpdump -i eth0 |
捕获特定个数(1000)的包 | tcpdump -c 1000 -i eth0 |
将捕获的包保存到文件 | tcpdump -w a.pcap -i eth0 |
读取pcap格式的包 | tcpdump -r a.pcap |
增加捕获包的时间戳 | tcpdump -n -ttt -i eth0 |
指定捕获包的协议类型 | tcpdump -i eth0 arp |
捕获指定端口 | tcpdump -i eth0 post 22 |
捕获特定目标ip+port的包 | tcpdump -i eth0 dst address and port 22 |
捕获DNS请求和响应 | tcpdump -i eth0 -s0 port 53 |
匹配Http请求头 | tcpdump -s 0 -v -n -l | egrep -i “POST /|GET /Host:” |
Isof
列出当前系统打开的文件描述符工具。可以得知感兴趣的描述符是被哪些进程使用
参数
案例
执行任务 | 命令 |
---|---|
列出所有的网络链接 | lsof -i |
列出所有udp的网络链接 | lsof -i udp |
列出谁在使用某个端口 | lsof -i :3306 |
列出谁在使用特定的tcp端口 | lsof -i tcp:80 |
根据文件描述范围列出文件信息 | lsof -d 2-3 |
udp | 命令 |
---|---|
列出谁在使用某个端口 | lsof -i :3306 |
列出谁在使用特定的tcp端口 | lsof -i tcp:80 |
根据文件描述范围列出文件信息 | lsof -d 2-3 |
netstat
netstat是一个网络信息统计工具。它可以得到网卡接口上全部了解,路由表信息,网卡接口信息等。通常在网络编程中我们用它来显示TCP连接以及状态信息。
参数
案例
执行任务 | 执行命令 |
---|---|
列出所有连接 | netstat -a |
只列出TCP或者UDP | netstat -at/netstat -au |
列出监听中的连接 | netstat -tnl |
获取进程名、进程号以及用户 ID | nestat -nlpt |
打印统计信息 | netstat -s |
netstat持续输出 | netstat -ct |
打印active状态的连接 | netstat -atnp |
查看服务是否运行(npt) | netstat -aple |
dpkt
dpkt定义包packet类,它定义了网络报文类型的基础类。其中IP,ICMP等继承于dpkt class,每一个子类有一个_ hdr_ 结构,此结构定义了不同报文的头部,方便取出相应的控制字段。示例如下
1 | #!/usr/bin/python |
scapy
“强大的交互式包操作工具”、“支持大量协议的包解析和包构造”、“轻松取代 hping,85% 的 nmap,arpspoof,tcpdump 等等”。不过归根到底,它说的强大功能,都是基于 Scapy 是一个强大的网络数据包操作工具才能实现得了的。只是大概介绍,具体用法官网非常详细,有助于学习网络协议