Linux网络调试工具

  1,tcpdump:dump traffic on a network。tcpdump打印经过指定网络接口的符合某个布尔表达式的数据包的首部。

  1)常用选项:-w file:将从网络接口上读取的数据包保存到文件file以供后续分析;-r file:从文件file而不是网络接口中读取数据包;-c count:只读取和处理count个数据包(默认count没有限制),或者因收到SIGINT或SIGTERM信号而退出;-i interface:从网络接口interface中读取数据包;-A:以ASCII码形式打印包的内容(去掉链路层首部);-x:以十六进制形式打印包的内容(去掉链路层首部);-xx:以十六进制形式打印包的内容(包含链路层首部);-X:以十六进制和ASCII码形式打印包的内容(去掉链路层首部),在分析新协议的时候很方便。

  2)使用形式:tcpdump option option_val filter_expression。filter_expression即上面提到的布尔表达式,如果没有指定,则把(指定网络接口的)所有数据打印出来。一些例子:

  监听网络接口eth1上62626端口发出的udp数据包:sudo /usr/sbin/tcpdump -ieth1 udp src port 62626。src和dst分别表示发送方和接收方。

  监听网络接口lo上某几个端口的udp数据包:sudo /usr/sbin/tcpdump -ilo '(udp port 52033 || udp port 20801 || udp port 59208 || udp port 62626)'

  以下例子可以帮助我们更好地理解,通过udp的sendto函数发送'hello haner'的时候,TCP/IP各层是如何封装数据的:

  

  以下解读上图中part 1~8各部分的含义(参照下图“UDP首部格式”和“IP首部格式”):

  part 1表示发送的内容'hello haner'。

  part 2表示“UDP长度”,是UDP首部(8字节)和UDP数据(11字节)的长度和。

  part 3表示“UDP源和目的端口号”,这里是49744和61535。

  part 4表示“源IP地址和目的IP地址”,这里均是127.0.0.1。

  part 5:40(十进制64)表示TTL;11(十进制17)表示UDP协议,另有1(ICMP)、2(IGMP)、6(TCP),因为它们都要向IP传送数据,所以要加以区分。

  part 6表示“IP报文总长度”,这里27(十进制39)即20+8+11。

  part 7:4表示“版本”,这里即IPv4;5表示“IP报文首部长度”,这里是首部占32 bit字的数目,为5*4=20。

  part 8表示以太网链路层的封装格式,分成目的地址(6字节)、源地址(6字节)和类型(2字节)。IP数据报、ARP请求/应答、RARP请求/应答分别用类型0800、0806和8035来区分。

  

  3)filter表达式(参考man pcap-filter:packet filter syntax)

  两个例子:tcpdump -i ens33 ip host echo.websocket.org -X和tcpdump -i ens33 '(ip src 192.168.200.30) && (tcp port 80)' -X。

  在上例中,称echo.websocket.org、192.168.200.30和80为id(名称或数字),而id前是一个或多个限定词(qualifier)。主要有三种限定词:

  (1)type:id的类型,如host/net/port/portrange。默认为host。

  (2)dir:方向,如src/dst/src or dst/src and dst。例如'src or dst port ftp-data'。默认为src or dst。

  (3)proto:协议,如ether/wlan/ip/arp/tcp。例如'wlan addr2 0:2:3:4:5:6'。默认为符合type的所有协议,如'src foo'表示'ip or arp or rarp src foo'、'port 53'表示'tcp or udp port 53'。

  复杂的filter表达式可借助and、or和not表示。

 

  2、wireshark:Interactively dump and analyze network traffic.

  wireshark是一个图形用户界面的网络协议分析器。通过它,你可以交互式地浏览和分析从某个网卡捕获或之前保存在文件中的数据包。

  wireshark支持多种数据格式,如tcpdump -w的pcap格式、dumpcap -w的pcap-ng格式和微软Network Monitor的数据格式等。

  1)安装:sudo apt-get install wireshark。

  2)使用:

# wireshark使用dumpcap抓包,而后者需要root权限
# 普通用户要执行wireshark(和dumpcap),需要设置/usr/bin/dumpcap的SUID位
# SUID位(设置用户ID位)使得执行该文件的用户暂时拥有了文件所有者的权限
# 通常,有效用户ID=实际用户ID,但SUID位使得“进程的有效用户ID“=“程序文件所有者的用户ID”
sudo chmod 4755 /usr/bin/dumpcap

  如图为wireshark运行时的情况,依次显示了数据包列表、选定的数据包各个层的内容和该数据包的具体数据:

  

 

  3、netcat(被誉为网络安全界的“瑞士军刀”):通过使用TCP或UDP协议的网络连接读写数据。同时,它还是一个功能强大的网络调试和探测工具,能够建立你需要的几乎所有类型的网络连接。

  netcat在不同系统中的相同或类似程序:nc、ncat、pnetcat、socat、sock、socket、sbd。其中,socat比netcat更大更复杂,而cryptcat是netcat的带加密能力的版本(twofish encryption enabled version of nc)。

  1)常用选项:-i sec:若sec秒内无读写事件,则超时断开;-k:允许接受多个连接请求。必须和-l一起使用;-l:监听模式;-o file:以十六进制转储传输的数据;-p port:指定本地端口(或端口范围lo-hi);-r:随机选择本地和远端的端口;-s addr:本地源地址。指定将要发送数据包的网络接口的IP;-t:telnet相关,对于RFC 854的DO和WILL请求,发送RFC 854的DON'T和WON'T应答;-u:使用UDP(而非默认的TCP);-U:使用UNIX域socket(数据报);-v:输出详细信息;-w secs:若连接未能建立或闲置超过secs秒,则超时;-z:使用零I/O模式(不发送数据)扫描(指定主机)处于监听状态的后台程序。

  2)一些例子:

  (1)文件传输。通过端口17632从client复制文件到server:

  server:netcat -l -p 17632 > test.txt

  client:netcat serverip 17632 < test.txt

  netcat serverip 17632创建了一个指向serverip:17632的TCP连接,此时标准输入的内容会被发送到serverip,而从serverip返回的数据会重定向到标准输出。

  (2)端口扫描。默认扫描TCP端口,-u可以指定扫描UDP端口。

  

  (3)获得端口信息。

  

  (4)远程执行命令。也许是出于安全考虑,在linux中没有-c或-e选项(netcat -v -l -p port -e command),但通过重定向文件描述符依然可以在连接建立之后远程执行命令【危险】:

  在server端:rm -f /tmp/f; mkfifo /tmp/f; cat /tmp/f | /bin/sh -i 2>&1 | netcat -l 127.0.0.1 1234 > /tmp/f

  在client端:netcat serverip 1234。之后出现server的shell提示符。

  当client与server建立连接后,server上的/bin/sh得以执行,并给client返回shell提示符。之后命令的输入和输出都通过网络连接和管道传输。

  

 

 

  参考资料:

  http://www.cnblogs.com/ddtpower/archive/2012/12/20/ubuntu_wireshark_dumpcap.html

 

 

不断学习中。。。

posted on 2013-11-28 14:26  han'er  阅读(4445)  评论(0编辑  收藏  举报

导航