2) 网卡驱动程序所在目录
/lib/modules/2.6.29.4-167.fc11.i686.PAE/kernel/drivers/net
3) 查看网卡信息命令
ethtool eth0 (^ 查看网卡信息 ^)
dmesg | grep -i eth (^ 查看网卡信息 ^)
1 tcpdump
http://anheng.com.cn/news/24/586.html
1.1 tcpdump的选项介绍
tcpdump
-a 将网络地址和广播地址转变成名字;
-c 在收到指定的包的数目后, tcpdump就会停止;
-ddd 将匹配信息包的代码以十进制的形式给出;
-dd 将匹配信息包的代码以c语言程序段的格式给出;
-d 将匹配信息包的代码以人们能够理解的汇编格式给出;
-e 在输出行打印出数据链路层的头部信息;
-F 从指定的文件中读取表达式,忽略其它的表达式;
-f 将外部的Internet地址以数字的形式打印出来;
-i 指定监听的网络接口;
-l 使标准输出变为缓冲行形式;(即: 将数据重定向)
-nn 不进行端口名称的转换.
-n 不把网络地址转换成名字;
-N 不打印出默认的域名.
-O 不进行匹配代码的优化.
-r 从指定的文件中读取包(这些包一般通过-w选项产生);
-tt 打印原始的,未格式化过的时间.
-T 将监听到的包直接解释为指定的类型的报文, 常见的类型有rpc(远程过
-t 在输出的每一行不打印时间戳;
-vv 输出详细的报文信息;
-v 输出一个稍微详细的信息, 例如在ip包中可以包括ttl和服务类型的信息;
-w 直接将包写入文件中, 并不分析和打印出来;
程调用)和snmp(简单网络管理协议;);
Note: 如想dump包给别的软件分析, tcpdump的包长度限制截断默认90个字节一定要去掉.
即: 加上 -s 0 参数.
1) example
tcpdump -l > tcpcap.txt (^ 将得到的数据存入tcpcap.txt文件中 ^)
1.2 tcpdump的表达式介绍
1) 第一种是关于类型的关键字, 主要包括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.
2) 第二种是确定传输方向的关键字, 主要包括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关键字.
3) 第三种是协议的关键字, 主要包括fddi,ip,arp,rarp,tcp,udp等类型. Fddi指明是在
FDDI(分布式光纤数据接口网络)上的特定的网络协议, 实际上它是"ether"的别名,
fddi和ether具有类似的源地址和目的地址, 所以可以将fddi协议包当作ether的包进
行处理和分析. 其他的几个关键字就是指明了监听的包的协议内容. 如果没有指定任
何协议, 则tcpdump将会监听所有协议的信息包.
4) 除了这三种类型的关键字之外, 其他重要的关键字如下: gateway,
broadcast,less,greater,还有三种逻辑运算, 取非运算是 'not' '!', 与运算是
'and','&&';或运算 是'or' ,'||'; 这些关键字可以组合起来构成强大的组合条件
来满足人们的需要, 下面举几个例子来说明.
1.3 例子
note: tcpdump 对截获的数据并没有进行彻底解码, 数据包内的大部分内容是使用十六进
制的形式直接打印输出的. 显然这不利于分析网络故障, 通常的解决办法是先使用带
-w参数的tcpdump 截获数据并保存到文件中, 然后再使用其他程序进行解码分析. 当
然也应该定义过滤规则, 以避免捕获的数据包填满整个硬盘.
note: 如果在ethernet 使用混杂模式 系统的日志将会记录
| May 7 20:03:46 localhost kernel: eth0: Promiscuous mode enabled. |
| May 7 20:03:46 localhost kernel: device eth0 entered promiscuous mode |
| May 7 20:03:57 localhost kernel: device eth0 left promiscuous mode |
note: ip icmp arp rarp 和 tcp,udp,icmp这些选项等都要放到第一个参数的位置,
用来过滤数据报的类型.
tcpdump host 210.27.48.1 and (210.27.48.2 or 210.27.48.3) // 截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信
tcpdump host 210.27.48.1 // 截获主机210.27.48.1所有收到的和发出的所有的数据包
tcpdump -i eth0 dst host hostname // 监视所有发送到主机hostname的数据包
tcpdump -i eth0 gateway Gatewayname // 还可以监视通过指定网关的数据包
tcpdump -i eth0 host ! 211.161.223.70 and ! 211.161.223.71 and dst port 80 // 如果条件很多的话 要在条件之前加and 或 or 或 not
tcpdump -i eth0 host hostname and dst port 80 // 只监视发送到80端口的数据包
tcpdump -i eth0 host hostname and port 80 // 监视指定端口的TCP或UDP数据包
tcpdump -i eth0 src host hostname // 只对名为hostname的主机的发出数据包进行监视
tcpdump ip host 210.27.48.1 and ! 210.27.48.2 // 获取主机210.27.48.1和除了主机210.27.48.2之外所有主机通信的ip包
tcpdump src host 192.168.0.1 and dst net 192.168.0.0/24 // 源主机为192.168.0.1与目的网络为192.168.0.0
Tcpdump src host 192.168.0.1 and dst port not telnet // 过滤源主机192.168.0.1和目的端口不是telnet的报头.
tcpdump tcp port 23 host 210.27.48.1 // 获取主机210.27.48.1接收或发出的telnet包
tcpdump udp and src host 192.168.0.1 // 只过滤源主机192.168.0.1的所有udp报头.
tcpdump udp port 123 // 对本机的udp 123 端口进行监视.(123 为ntp的服务端口)
1.4 tcpdump的输出结果介绍
1.4.0 other
[~]# tcpdump -i eth1 src host 211.167.237.199
| 00:02:03.096713 IP 211.167.237.199.ssh > 221.216.165.189.1467: P 2010208:2010352(144) ack 33377 win 8576 |
| 00:02:03.096951 IP 211.167.237.199.ssh > 221.216.165.189.1467: P 2010352:2010496(144) ack 33377 win 8576 |
| 00:02:03.100928 IP 211.167.237.199.ssh > 221.216.165.189.1467: P 2010496:2010640(144) ack 33377 win 8576 |
| 00:02:03.101165 IP 211.167.237.199.ssh > 221.216.165.189.1467: P 2010640:2010784(144) ack 33377 win 8576 |
| 00:02:03.102554 IP 211.167.237.199.ssh > 221.216.165.189.1467: P 2010784:2010928(144) ack 33425 win 8576 |
analysis: 表明在00:02:03点的时候, 211.167.237.199通过ssh源端口连接到221.216.165.189的1467端口
// 截获所有由eth1进入,源地址(src)为211.167.237.199的主机(host), 并且(and)目标
// (dst)端口(port)为1467的数据包:
[~]# tcpdump -i eth1 src host 211.167.237.199 and dst port 1467
| 00:09:27.603075 IP 211.167.237.199.ssh > 221.216.165.189.1467: P 180400:180544(144) ack 2833 win 8576 |
| 00:09:27.605631 IP 211.167.237.199.ssh > 221.216.165.189.1467: P 180544:180688(144) ack 2881 win 8576 |
// 观看网卡传送,接收数据包的状态
[~]$ netstat -i
| Kernel Interface table |
| Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg |
| eth0 1500 0 14639 0 0 0 5705 119 0 0 BMRU |
analysis: 各字段意思:
Iface: 网卡
RX-OK RX-ERR RX-DRP RX-OVR : 网卡正确接收数据包的数量以及发生错误,流失,碰撞的总数
TX-OK TX-ERR TX-DRP TX-OVR : 网卡正确发送数据包的数量以及发生错误,流失,碰撞的总数
1.4.1 数据链路层头信息
[~]# tcpdump -e host ice
| 21:50:12.847509 eth0 < 8:0:20:79:5b:46 0:90:27:58:af:1a ip 60: h219.33357 > ice.telne t 0:0(0) ack 22535 win 8760 (DF) |
// ice是一台装有linux的主机,她的MAC地址是0:90:27:58:AF:1A; H219是一台装有SOLARIC
// 的SUN工作站,它的MAC地址是8:0:20:79:5B:46; 上一条命令的输出结果如下所示:
analysis: 21:50:12是显示的时间,847509是微秒, eth0<表示从网络接口eth0接受该数据包
; eth0>表示从网络接口设备发送数据包,8:0:20:79:5b:46是主机H219的MAC地址. 它表
明是从源地址H219发来的数据包.0:90:27:58:af:1a是主机ICE的MAC地址,表示该数据
包的目的地址是ICE.ip是表明该数据包是IP数据包,60是数据包的长度,
h219.33357>ice.telnet表明该数据包是从主机H219的33357端口发往主机ICE的
TELNET(23)端口.ack22535表明对序列号是22535的包进行响应.win8760表明发送窗
口的大小是8760.
1.4.2 ARP包的TCPDUMP输出信息
[~]# tcpdump arp
| 22:32:42.802509 eth0 > arp who-has route tell ice (0:90:27:58:af:1a) |
| 22:32:42.802902 eth0 < arp reply route is-at 0:90:27:12:10:66 (0:90:27:58:af:1a) |
analysis: 22:32:42是时间戳, 802509是微秒, eth0 >表明从主机发出该数据包, arp表
明是ARP请求包, who-has route tell ice表明是主机ICE请求主机ROUTE的MAC地址.
0:90:27:58:af:1a是主机ICE的MAC地址.
1.4.3 TCP包的输出信息
用TCPDUMP捕获的TCP包的一般输出信息格式是:
src > dst: flags data-seqno ack window urgent options
analysis: src > dst:表明从源地址到目的地址, flags是TCP包中的标志信息,S 是SYN标
志, F (FIN), P (PUSH) , R (RST) "." (没有标记); data-seqno是数据包中的数据
的顺序号, ack是下次期望的顺序号, window是接收缓存的窗口大小, urgent表明数
据包中是否有紧急指针. Options是选项.
1.4.4 UDP包的输出信息
用TCPDUMP捕获的UDP包的一般输出信息格式是:
route.port1 > ice.port2: udp lenth
analysis: UDP十分简单, 上面的输出行表明从主机ROUTE的port1端口发出的一个UDP数据
包到主机ICE的port2端口, 类型是UDP, 包的长度是lenth.
2 netstat
netstat主要用于Linux察看自身的网络状况, 如开启的端口,在为哪些用户服务, 以及服
务的状态等. 此外, 它还显示系统路由表,网络接口状态等. 可以说, 它是一个综合性的
网络状态的察看工具. 在默认情况下, netstat只显示已建立连接的端口. 如果要显示处
于监听状态的所有端口, 使用-a参数即可:
2.1 tcpdump的选项介绍
格式:
netstat [-acCeFghilMnNoprstuvVwx][-A][--ip]
参数:
-a--all: 显示所有连线中的Socket.
-A: 列出该网络类型连线中的IP相关地址和网络类型.
-C--cache: 显示路由器配置的缓冲区信息.
-c--continuous: 持续列出网络状态.
-e--extend: 显示网络其它相关信息.
-F--fib: 显示FIB.
-g--groups: 显示多重广播功能群组组员名单.
-h--help: 在线帮助.
-i--interfaces: 显示网络界面信息表单.
--ip--inet: 和指定"-A inet"参数相同.
-l--listening: 显示监控中的服务器的Socket.
-M--masquerade: 显示伪装的网络连线.
-N--netlink--symbolic: 显示网络硬件外围设备的符号连接名称.
-n--numeric: 直接使用IP地址, 而不通过域名服务器.
-o--timers: 显示计时器.
-p--programs: 显示正在使用Socket的程序识别码和程序名称.
-r--route: 显示Routing Table.
-s--statistice: 显示网络工作信息统计表.
-t--tcp: 显示TCP传输协议的连线状况.
-u--udp: 显示UDP传输协议的连线状况.
-v--verbose: 显示指令执行过程.
-V--version: 显示版本信息.
-w--raw: 显示RAW传输协议的连线状况.
-x--unix: 和指定"-A unix"参数相同.
2.2 应用实例
netstat -al | grep telnet // (&1&) 查看telnet是否正常启动到监听状态
netstat -aln | grep :23 // (&1&) 查看telnet是否正常启动到监听状态
netstat -tuln | grep ':80' (^ 查看系统是否己启动某一端口号 ^)
netstat -r (^ 查看route表 ^)
netstat -s -u (^ 统计udp数据包信息 ^)
2.3 netstat的输出结果介绍
// 显示处于监听状态的所有端口, 使用-a参数即可:
[~]# netstat -a
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 *:32768 *:* LISTEN
tcp 0 0 *:32769 *:* LISTEN
tcp 0 0 *:nfs *:* LISTEN
tcp 0 0 *:32770 *:* LISTEN
tcp 0 0 *:868 *:* LISTEN
tcp 0 0 *:617 *:* LISTEN
tcp 0 0 *:mysql *:* LISTEN
tcp 0 0 *:netbios-ssn *:* LISTEN
tcp 0 0 *:sunrpc *:* LISTEN
tcp 0 0 *:10000 *:* LISTEN
tcp 0 0 *:http *:* LISTEN
......
Analysis: 上面显示出, 这台主机同时提供HTTP,FTP,NFS,MySQL等服务.