Linux运维工程师必会工具(Nmap和TCPdump)

1、NMap工具

主要功能:探测主机是否在线、扫描主机开放端口和嗅探网络服务,用于网络探测和安全扫描。

NMap支持很多扫描技术,例如:UDP、TCPconnect()、TCPSYN(半开扫描)、ftp代理(bounce攻击)、反向标志、ICMP、FIN、ACK扫描、SYN扫描和null扫描。

命令格式:Nmap [ 扫描类型 ] [ 通用选项 ] { 扫描目标说明 }

扫描类型:

-sT TCP connect()扫描,这是最基本的TCP扫描方式,用来建立一个TCP连接,如果成功则认为目标端口正在监听,否则认为目标端口没有监听程序。这种扫描很容易被检测到,在目标主机的日志中会记录大批的连接请求以及错误信息。

-sS TCP同 步扫描(TCP SYN),只向目标发出SYN数据包,如果收到SYN/ACK响应包就认为目标端口正在监听,并立即断开连接;否则认为目标端口没有监听程序。所以这项技 术通常称为半开扫描(half-open)。这项技术最大的好处是,很少有系统能够把这记入系统日志。不过,你需要root权限来定制SYN数据包。

-sF,-sX,-sN 秘密FIN数据包扫描、圣诞树(Xmas Tree)、空(Null)扫描模式。这些扫描方式的理论依据是:关闭的端口需要对你的探测包回应RST包,而打开的端口必需忽略有问题的包,通过这种扫描,可间接用于检测防火墙的健壮性。

-sP ping扫描,用ping方式检查网络上哪些主机正在运行。当主机阻塞ICMP  echo请求包是ping扫描是无效的。nmap在任何情况下都会进行ping扫描,只有目标主机处于运行状态,才会进行后续的扫描。

-sU UDP扫描,如果你想知道在某台主机上提供哪些UDP服务,可以使用此选项。

-sA ACK扫描,这项高级的扫描方法通常可以用来穿过防火墙。

-sW 滑动窗口扫描,非常类似于ACK的扫描。

-sR RPC扫描,和其它不同的端口扫描方法结合使用。

-b FTP反弹攻击(bounce attack),连接到防火墙后面的一台FTP服务器做代理,接着进行端口扫描。

通用选项:

-n 不做反向DNS解析,以加快扫描速度

-P0 在扫描之前,不ping主机;有些网络防火墙可能禁止ICMP请求包,使用这种扫描类型可以跳过ping测试

-PT 扫描之前,使用TCP ping确定哪些主机正在运行。

-PS 对于root用户,这个选项让nmap使用SYN包而不是ACK包来对目标主机进行扫描。

-PI 设置这个选项,让nmap使用真正的ping(ICMP echo请求)来扫描目标主机是否正在运行。

-PB 这是默认的ping扫描选项。它使用ACK(-PT)和ICMP(-PI)两种扫描类型并行扫描。如果防火墙能够过滤其中一种包,使用这种方法,你就能够穿过防火墙。

-O 这个选项激活对TCP/IP指纹特征(fingerprinting)的扫描,获得远程主机的标志,也就是操作系统类型。

-I 打开nmap的反向标志扫描功能。

 -f 使用碎片IP数据包发送SYN、FIN、XMAS、NULL。包增加包过滤、入侵检测系统的难度,使其无法知道你的企图。

-v 强烈推荐使用这个选项,它会给出扫描过程中的详细信息。

-S <IP> 在一些情况下,nmap可能无法确定你的源地址(nmap会告诉你)。在这种情况使用这个选项给出你的IP地址。

-g port 设置扫描的源端口。一些天真的防火墙和包过滤器的规则集允许源端口为DNS(53)或者FTP-DATA(20)的包通过和实现连接。显然,如果攻击者把源端口修改为20或者53,就可以摧毁防火墙的防护。

-oN 把扫描结果重定向到一个可读的文件logfilename中。

-oS 扫描结果输出到标准输出。

-A 打开操作系统探测和版本探测。

扫描目标:

目标地址 可以为IP地址,CIRD地址等。如192.168.1.2,222.247.54.5/24

-iL filename 从filename文件中读取扫描的目标。

-iR 让nmap自己随机挑选主机进行扫描。

-p 端口,这个选项让你选择要进行扫描的端口号的范围。可使用逗号分隔多个端口,减号连接一个端口范围,在列表前指定T:表示TCP端口,U:表示UDP端口

-exclude 排除指定主机。

-excludefile 排除指定文件中的主机。

端口的三种状态:

Open:意味着目标主机能够在这个端口使用accept()系统调用接受连接。

filtered:表示防火墙、包过滤和其它的网络安全软件掩盖了这个端口,禁止nmap探测其是否打开。

unfiltered:表示这个端口关闭,并且没有防火墙/包过滤软件来隔离nmap的探测企图。

举例说明:

1、探测指定网段是否有FTP服务的主机,不做DNS反向解析

nmap -sS �Cn �Cp 21192.168.0.0/24

2、探测指定服务器是否启有特定端口的服务

nmap �Cn �Cp T:21-25,80,110,3389�CsS 192.168.0.1

3、使用TCP连接扫描探测指定服务器,即使无法ping通也仍然继续探测

4、nmap -sT �CPO 192.168.0.1

5、探测指定服务器的操作系统类型

nmap �CO �Cn 192.168.0.1

6、探测局域网段中各主机开启了哪些服务

nmap �CsS 192.168.0.0/24

7、探测192.168.0.0和172.16.0.0/16网段中有哪些主机在运行

nmap �CsP �Cn 192.168.0.0/24 172.16.0.0/16

8、快速扫描主机开放端口

nmap -F 192.168.0.1

2、TCPDump工具

主要功能:捕获和分析数据包。

TcpDump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供 and、or、not等逻辑语句来帮助你去掉无用的信息。

命令格式:tcpdump [ 选项 ] [ -c 数量 ] [ -i 网络接口 ] [ -w 文件名 ] [ 表达式 ]

常用选项:

-l:使标准输出变为缓冲行形式;

-c:抓包次数;

-nn:直接以 IP 及 Port Number 显示,而非主机名与服务名称;

-s :<数据包大小> 设置每个数据包的大小;

-i:指定监听的网络接口;

-r:从指定的文件中读取包;

-w:输出信息保存到指定文件;

-a:将网络地址和广播地址转变成名字;

-d:将匹配信息包的代码以人们能够理解的汇编格式给出;

-e:在输出行打印出数据链路层的头部信息;

-f:将外部的Internet地址以数字的形式打印出来;

-t:在输出的每一行不打印时间戳;

-v :输出稍微详细的报文信息;加一个v更详细。

 

四种表达式:过滤报文条件

1、 关于类型的关键字,主要包括host,net,port, 例如 host210.27.48.2,指明 210.27.48.2是一台主机,net 202.0.0.0 指明202.0.0.0是一个网络地址,port 23 指明端口号是23。如果没有指定类型,缺省的类型是host。

2、 确定传输方向的关键字,主要包括src, dst ,dst or src, dst and src ,这些关键字指明了传输的方向。例如 src210.27.48.2 ,指明ip包中源地址是210.27.48.2, dst net 202.0.0.0 指明目的网络地址是202.0.0.0 。如果没有指明方向关键字,则缺省是src or dst关键字。

3、协议的关键字,主要包括ip,arp,tcp,udp等类型。

4、三种逻辑运算,与运算是'and','&&'; 或运算是'or' ,'||'; 非运算是 'not ' '! '。

其他重要的关键字如下: broadcast,less(小于),greater(大于)

举例说明:

1、截获eth0网卡10次收发所有数据包并将抓包结果保存到test文件,再读取test抓包结果文件

tcpdump �Ci eth0 �Cc 10 �Cw test

tcpdump �Cr test

2、截获来访问80端口的所有数据包(指定端口范围portrange 1-1024)

tcpdump port 80

3、截获所有来自主机114.254.151.51的进出所有数据包

tcpdump host 114.254.151.51

4、截获ip包中源地址是114.254.151.51的(目的是dst)

tcpdump src 114.254.151.51

5、截获主机114.254.151.51和主机114.254.151.52的通信

tcpdum host 114.254.151.51 and 114.254.151.52

6、截获tcp协议并且源地址114.254.151.51来访问80的端口

tcpdump tcp and src 114.254.151.51 and port 80

7、截获主机114.254.151.51除了和114.254.151.52之外的所有ip包

tcpdump ip host 114.254.151.51 and ! 114.254.151.52

8、截获长度大于1000数据包,对于DDOS攻击时,可以使用

tcpdump greater 1000


tcpdump工具补充


tcpdump [ -adeflnNOpqStvx ] [ -c 数量 ] [ -F 文件名 ]
    [ -i 网络接口 ] [ -r 文件名] [ -s snaplen ]
    [ -T 类型 ] [ -w 文件名 ] [表达式 ]

OPTIONS
-A    以ASCII格式打印所有分组
-c    收到count个包后退出
-C    在将包写入文件前,先检查文件大小是否超过file_size大小,如果超过则关闭该文件并重新打开新文件
-D    打印出系统中所有可用tcpdump监听的端口
-e    打印出链路层包头信息
-f    将外部的Internet地址以数字的形式打印出来
-F    从指定文件中读取表达式,忽略命令行的表达式
-i    监听的网络端口,如果没有指定,则监听最低号码的端口。在2.2内核以后,可以使用any参数使tcpdump监听在所有端口
-n    不把ip地址转化成名称
-N    不输出主机名中的域名部分
-P    不将接口设置成混杂模式
-q    快速输出,输出较少的协议信息
-r    在一个文件中读取包信息(使用-w创建的文件)
-T    将监听到的包直接解释为指定的类型的报文
-v    输出一个详细的包信息,当使用-w把报文写入一个文件中时,每10秒报告一次
-vv    输出更详细
-vvv    输出更详细
-t    不在每一行显示时间戳
-tt    在每一行中显示非格式化的时间戳
-ttt    输出本行和前面一行的时间差
-u    输出未解码的NFS句柄
-w   把抓取的包写入一个文件中,稍后可以使用-r从该文件中读取包信息,如果把输出写入一个文件或者管道中,输出会先输入buffer中,所以从文件中读取会有延迟,使用-U标记可以使包信息立刻写入文件中




表达式是一个正则表达式,tcpdump利用它作为过滤报文的条件,如果一个报文满足表达式的条件,则这个报文将会被捕获。如果没有给出任何条件,则网络上所有的信息包将会被截获。在表达式中一般如下几种类型的关键字。


    第一种是关于目标类型的关键字,主要包括host,net,port, 例如 host 210.27.48.2,指明210.27.48.2是一台主机,net 202.0.0.0 指明 202.0.0.0是一个网络地址,port 23 指明端口号是23。如果没有指定类型,缺省的类型是host.


    第二种是确定传输方向的关键字,主要包括src, dst,dst or src, dst and src,这些关键字指明了传输的方向。举例说明,src 210.27.48.2 ,指明ip包中源地址是210.27.48.2, dst net 202.0.0.0指明目的网络地址是202.0.0.0。如果没有指明方向关键字,则缺省是src or dst关键字。


    第三种是协议的关键字,主要包括fddi,ip,arp,rarp,tcp,udp等类型。Fddi指明是在FDDI(分布式光纤数据接口网络)上的特定的网络协议,实际上它是"ether"的别名,fddi和ether具有类似的源地址和目的地址,所以可以将fddi协议包当作ether的包进行处理和分析。其他的几个关键字就是指明了监听的包的协议内容。如果没有指定任何协议,则tcpdump将会监听所有协议的信息包。


    除了这三种类型的关键字之外,其他重要的关键字如下:gateway, broadcast,less,greater,还有三种逻辑运算,取非运算是 'not ' '! ', 与运算是'and','&&';或运算 是'or' ,'││';这些关键字可以组合起来构成强大的组合条件来满足人们的需要。


tcpdump只是一个抓取工具,更重要的是会对抓取的包进行分析。

转自:

http://www.waitalone.cn/yunwei-nmap-and-tcpdump.html

http://blog.csdn.net/big1980/article/details/9812735


你可能感兴趣的:(Linux下的nmap,tcpdump使用方法)