[Linux] linux常用网络工具tcpdump
来源:互联网 发布:nodejs调用windows api 编辑:程序博客网 时间:2024/05/16 08:38
Tcpdump-转储网络上的数据流
Tcpdump能够截获当前所有通过本机网卡的数据包。它拥有灵活的过滤机制,可以确保得到想要的数据。由于Tcpdump只能收集通过本机的数据,因此它的应用受到了一些限制,大多应用在网关或服务器自我检测上。例如,在作为网关的主机上,想知道本地网络中IP地址为192.168.0.5的主机现在与外界通信的情况,就可以使用如下命令:
tcpdump -i eth0 src host 192.168.0.5
在默认情况下,Tcpdump会将数据输出到屏幕。如果数据量太大,可能根本看不清具体的内容,这时我们可以把它重定向到文件再进行分析。如果眼神不错,就可以清楚地了解这位仁兄刚才的一举一动:
访问了新浪网主页
20:05:32.473388 192.168.0.5.1872 >;[url]www.sina.com.http:[/url]
S 1372301404:1372301404(0) win 64240 ; (DF)
……
进行了netbios广播进行名字查询
20:05:33.823388 192.168.0.5.netbios-dgm>;
192.168.0.255.netbios-dgm: NBT UDPPACKET(13[img]http://bbs.chinaunix.net/images/smilies/icon_cool.gif[/img]
……
到新华网POP3服务器收信
20:05:41.953388 192.168.0.5.1878 >;pop.xinhuanet.com.pop3: S
1374956462:1374956462(0) win 64240 ; (DF)
……
到深圳963收信
20:05:45.633388 192.168.0.5.1881 >;szptt154.szptt.net.cn.pop3:
P 34:40(6) ack 146 win 64095 (DF)
……
例如,上面这条信息表明了在20:05:45的时候,192.168.0.5通过1881源端口连接到963电子邮局的POP3端口。对于普通的网络分析,这些信息已经足够了。这就是Tcpdump的基本功能,其它高级功能都是在这一基础上的细化和增强。
例如,我只想知道192.168.0.5当前正在访问哪些Web站点,可以用下面这条命令:
tcpdump -i eth0 src host 192.168.0.5 and dst port 80
该命令的目的是截获所有由eth0进入、源地址(src)为192.168.0.5的主机(host),并且(and)目标(dst)端口(port)为80的数据包。得到的数据如下:
20:05:32.473388 192.168.0.5.1872 >;[url]www.sina.com.http:[/url]
……
20:06:33.42344 192.168.0.5.1873 >;[url]www.sohu.com.http:[/url]
S 1374301404:1374301404(0) win 64245 ; (DF)
……
20:07:31.343248 192.168.0.5.1874 >;[url]www.21cn.com.http:[/url]
S 1377301404:1377301404(0) win 64241 ; (DF)
……
显然,通过and或者not这些逻辑组合,就可以得到特定的数据。Tcpdump还可以监听不同的数据类型(如TCP、UDP),以用不同的网络范围(如Host主机、Net网络),甚至用Ether直接指定物理地址。
用Tcpdump在网络中获取信息如此清晰,是不是有一种一览无余的感觉。正是因为Tcpdump功能过于强大,连个人隐私和敏感数据的保护都成了问题,所以通常只有root用户能够使用这一工具。
Nmap
Nmap设计的初衷是系统管理员可以方便地了解自己的网络运行情况,例如有多少台主机在运行、分别提供什么样的服务。因此,它扫描的速度非常快,尤其适合大型网络。在对网络进行扫描时,Nmap主要利用ICMPecho探测主机是否开启。凡是了解TCP/IP协议的都知道,对于一个TCP端口,无论是否使用防火墙进行过滤,该主机都会对该端口发出的请求做出一定响应。所以即使配置了严格的防火墙规则,nmap照样可以找到这些主机。例如,在一台IP地址为192.168.0.1的Linux主机上执行下列命令:
echo 1 >;/proc/sys/net/ipv4/icmp_echo_ignore_all
它的作用就是对所有ICMP echo不予理睬,也就是让通常用来测试网络的Ping命令失效。这样至少可以抵挡POD(Ping ofDeath)的攻击。在任何一台机器上Ping这台主机,得到的都会是请求超时,如:
Pinging 192.168.0.1 with 32 bytes of data:
Request timed out.
Request timed out.Request timed out.Request timed out.
Ping statistics for 192.168.0.1:
Packets: Sent = 4, Received = 0, Lost = 4 (100% loss)
这台主机是否下线了?用Nmap探测试试看:
nmap -sP 192.168.0.1
Starting nmap V. 2.54BETA22 ( [url]www.insecure.org/nmap/[/url])
Host gw.somewhere.net (192.168.0.1) appears to be up.
探测结果好像该主机还开着呢!这里,-sP指定使用Pingecho
利用这一特点,可以很快知道目的网络究竟有多少主机处于运行状态:
nmap -sP 192.168.0.0/24 //24表明目标是一个网络而非单个主机
Starting nmap V. 2.54BETA22 ( [url]www.insecure.org/nmap/[/url])
Host
Host [url]www.somesite.net[/url] (192.168.0.5) appears to beup.
Host
……
Host
Host fake.somesite.net (192.168.0.254) appears to be up.
Nmap run completed -- 256 IP addresses (19 hosts up) scanned in 6seconds
既然已经知道了哪些主机还开着,就可以进一步探测这些主机的信息,如开启的端口、提供的服务及操作系统类型等。从上面扫描的结果可以知道,192.168.0.5这台机器正在运行。想要了解该主机的详细信息,可以执行:
nmap 192.168.0.5
稍后会显示如下内容:
Starting nmap V. 2.54BETA22 ( [url]www.insecure.org/nmap/[/url])
Interesting ports on [url]www.somewhere.net[/url](192.168.0.5):
(The 1537 ports scanned but not shown below are in state:closed)
Port
80/tcp
135/tcp
139/tcp
443/tcp
1031/tcp
1433/tcp
Nmap run completed -- 1 IP address (1 host up) scanned in 0seconds
由上可以断定,这是一台运行Windows操作系统的主机,因为它开启了MS SQLServer的专用端口1433,还提供了HTTP服务等。这些信息如果被不怀好意的人得到,就可以采用对应的攻击办法。其实,强大的Nmap本身就可以依据TCP/IP的指纹特征猜测对方使用的操作系统。我们可以用-O来开启这一选项:
nmap -O 192.168.0.5
得到的结果是:
Starting nmap V. 2.54BETA22 ( [url]www.insecure.org/nmap/[/url])
Interesting ports on [url]www.somewhere.net[/url](192.168.0.5):
(The 1536 ports scanned but not shown below are in state:closed)
Port
80/tcp
135/tcp
139/tcp
443/tcp
1032/tcp
1433/tcp
Remote operating system guess: Microsoft NT 4.0 Server SP5 + 2047Hotfixes
Nmap run completed -- 1 IP address (1 host up) scanned in 2seconds
它猜测的远程主机类型是Microsoft NT 4.0 Server SP5 + 2047Hotfixes,并且相当准确和详尽。
Netstat
Netstat主要用于Linux/Unix主机察看自身的网络状况,如开启的端口、在为哪些用户服务以及服务的状态等等。此外,它还显示系统路由表、网络接口状态等。可以说,它是一个综合性的网络状态察看工具,不过中规中举。
例如在一台普通Linux服务器上运行Netstat,显示可能像这样:
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address