zoukankan      html  css  js  c++  java
  • Linux网络检测手段汇总

    1.iftop

    iftop可测量通过每一个套接字连接传输的数据;它采用的工作方式有别于nload。iftop使用pcap库来捕获进出网络适配器的数据包,然后汇总数据包大小和数量,搞清楚总的带宽使用情况。
    虽然iftop报告每个连接所使用的带宽,但它无法报告参与某个套按字连接的进程名称/编号(ID)。不过由于基于pcap库,iftop能够过滤流量,并报告由过滤器指定的所选定主机连接的带宽使用情况。

    iftop的输出从整体上可以分为三大部分。
    第一部分是iftop输出中最上面的一行,此行信息是流量刻度,用于显示网卡带宽流量。
    第二部分是iftop输出中最大的一个部分,此部分又分为左、中、右三列,左列和中列记录了哪些IP或主机正在和本机的网络进行连接。其中,中列的“=>”代表发送数据,“<=”代表接收数据,通过这个指示箭头可以很清晰地知道两个IP之间的通信情况。最右列又分为三小列,这些实时参数分别表示外部IP连接到本机2s、10s和40s内的平均流量值。另外,这个部分还有一个流量图形条,流量图形条是对流量大小的动态展示,以第一部分中的流量刻度为基准。通过这个流量图形条可以很方便地看出哪个IP的流量最大,进而迅速定位网络中可能出现的流量问题。
    第三部分位于iftop输出的最下面,可以分为三行,其中,“TX”表示发送数据,“RX”表示接收数据,“TOTAL”表示发送和接收的全部流量。与这三行对应的有三列,其中,“cum”列表示从运行iftop到目前的发送、接收和总数据流量;“peak”列表示发送、接收以及总的流量峰值;“rates”列表示过去2s、10s、40s内的平均流量值。

    在iftop的实时监控界面中,还可以对输出结果进行交互式操作,用于对输出信息进行整理和过滤,在图2-1所示界面中,按“h”键即可进入交互选项界面:

    2.MTR

    Mtr是 Linux中有一个非常棒的网络连通性判断工具,它结合了ping, traceroute,nslookup 的相关特性。

    [root@d_bbszb_web01 ~]# mtr -h
    usage: mtr [-hvrwctglspniu46] [--help] [--version] [--report]
    [--report-wide] [--report-cycles=COUNT] [--curses] [--gtk]>
    [--raw] [--split] [--no-dns] [--address interface]
    [--psize=bytes/-s bytes]
    [--interval=SECONDS] HOSTNAME [PACKETSIZE]


    报告说明:
    第一列:显示的是IP地址和本机域名,这点和tracert很像
    第二列:snt:10 设置每秒发送数据包的数量,默认值是10 可以通过参数 -c来指定。
    第三列:是显示的每个对应IP的丢包率
    第四列:显示的最近一次的返回时延
    第五列:是平均值 这个应该是发送ping包的平均时延
    第六列:是最好或者说时延最短的
    第七列:是最差或者说时延最常的
    第八列:是标准偏差

    3.traceroute

    通过traceroute我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路径。当然每次数据包由某一同样的出发点(source)到达某一同样的目的地(destination)走的路径可能会不一样,但基本上来说大部分时候所走的路由是相同的。linux系统中,我们称之为traceroute,在MS Windows中为tracert。
    traceroute通过发送小的数据包到目的设备直到其返回,来测量其需要多长时间。

    (1).命令格式:

    traceroute[参数][主机]

    (2).命令功能:

    traceroute指令让你追踪网络数据包的路由途径,预设数据包大小是40Bytes,用户可另行设置。
    具体参数格式:traceroute [-dFlnrvx][-f<存活数值>][-g<网关>...][-i<网络界面>][-m<存活数值>][-p<通信端口>][-s<来源地址>][-t<服务类型>][-w<超时秒数>][主机名称或IP地址][数据包大小]

    (3).命令参数:

    -d 使用Socket层级的排错功能。
    -f 设置第一个检测数据包的存活数值TTL的大小。
    -F 设置勿离断位。
    -g 设置来源路由网关,最多可设置8个。
    -i 使用指定的网络界面送出数据包。
    -I 使用ICMP回应取代UDP资料信息。
    -m 设置检测数据包的最大存活数值TTL的大小。
    -n 直接使用IP地址而非主机名称。
    -p 设置UDP传输协议的通信端口。
    -r 忽略普通的Routing Table,直接将数据包送到远端主机上。
    -s 设置本地主机送出数据包的IP地址。
    -t 设置检测数据包的TOS数值。
    -v 详细显示指令的执行过程。
    -w 设置等待远端主机回报的时间。
    -x 开启或关闭数据包的正确性检验。


    记录按序列号从1开始,每个纪录就是一跳 ,每跳表示一个网关,我们看到每行有三个时间,单位是 ms,其实就是-q的默认参数。探测数据包向每个网关发送三个数据包后,网关响应后返回的时间;如果您用 traceroute -q 4 www.58.com ,表示向每个网关发送4个数据包。
    有时我们traceroute 一台主机时,会看到有一些行是以星号表示的。出现这样的情况,可能是防火墙封掉了ICMP的返回信息,所以我们得不到什么相关的数据包返回数据。
    有时我们在某一网关处延时比较长,有可能是某台网关比较阻塞,也可能是物理设备本身的原因。当然如果某台DNS出现问题时,不能解析主机名、域名时,也会 有延时长的现象;您可以加-n 参数来避免DNS解析,以IP格式输出数据。
    如果在局域网中的不同网段之间,我们可以通过traceroute 来排查问题所在,是主机的问题还是网关的问题。如果我们通过远程来访问某台服务器遇到问题时,我们用到traceroute 追踪数据包所经过的网关,提交IDC服务商,也有助于解决问题;但目前看来在国内解决这样的问题是比较困难的,就是我们发现问题所在,IDC服务商也不可能帮助我们解决。

    其他示例:

    跳数设置 traceroute -m 10 www.baidu.com
    显示IP地址,不查主机名 traceroute -n www.baidu.com
    探测包使用的基本UDP端口设置6888 traceroute -p 6888 www.baidu.com
    把探测包的个数设置为值4 traceroute -q 4 www.baidu.com
    绕过正常的路由表,直接发送到网络相连的主机 traceroute -r www.baidu.com
    把对外发探测包的等待响应时间设置为3秒 traceroute -w 3 www.baidu.com

    4.tcpdump

    根据使用者的定义对网络上的数据包进行截获的包分析工具。 tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。
    [root@d_bbszb_web01 ~]# tcpdump -h
    tcpdump version 4.1-PRE-CVS_2012_03_26
    libpcap version 1.4.0
    Usage: tcpdump [-aAdDefIKlLnNOpqRStuUvxX] [ -B size ] [ -c count ]
    [ -C file_size ] [ -E algo:secret ] [ -F file ] [ -G seconds ]
    [ -i interface ] [ -M secret ] [ -r file ]
    [ -s snaplen ] [ -T type ] [ -w file ] [ -W filecount ]
    [ -y datalinktype ] [ -z command ] [ -Z user ]
    [ expression ]

    监视指定网络接口的数据包
    tcpdump -i eth1
    如果不指定网卡,默认tcpdump只会监视第一个网络接口,一般是eth0,下面的例子都没有指定网络接口。 

    监视指定主机的数据包
    打印所有进入或离开sundown的数据包.
    tcpdump host sundown
    也可以指定ip,例如截获所有210.27.48.1 的主机收到的和发出的所有的数据包
    tcpdump host 210.27.48.1
    打印helios 与 hot 或者与 ace 之间通信的数据包
    tcpdump host helios and ( hot or ace )
    截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信
    tcpdump host 210.27.48.1 and (210.27.48.2 or 210.27.48.3 )
    打印ace与任何其他主机之间通信的IP 数据包, 但不包括与helios之间的数据包.
    tcpdump ip host ace and not helios
    如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包,使用命令:
    tcpdump ip host 210.27.48.1 and ! 210.27.48.2
    截获主机hostname发送的所有数据
    tcpdump -i eth0 src host hostname
    监视所有送到主机hostname的数据包
    tcpdump -i eth0 dst host hostname

    监视指定主机和端口的数据包
    如果想要获取主机210.27.48.1接收或发出的telnet包,使用如下命令
    tcpdump tcp port 23 and host 210.27.48.1
    对本机的udp 123 端口进行监视 123 为ntp的服务端口
    tcpdump udp port 123

    监视指定网络的数据包
    打印本地主机与Berkeley网络上的主机之间的所有通信数据包(nt: ucb-ether, 此处可理解为'Berkeley网络'的网络地址,此表达式最原始的含义可表达为: 打印网络地址为ucb-ether的所有数据包)
    tcpdump net ucb-ether
    打印所有通过网关snup的ftp数据包(注意, 表达式被单引号括起来了, 这可以防止shell对其中的括号进行错误解析)
    tcpdump 'gateway snup and (port ftp or ftp-data)'
    打印所有源地址或目标地址是本地主机的IP数据包
    (如果本地网络通过网关连到了另一网络, 则另一网络并不能算作本地网络.(nt: 此句翻译曲折,需补充).localnet 实际使用时要真正替换成本地网络的名字)
    tcpdump ip and not net localnet

    监视指定协议的数据包
    打印TCP会话中的的开始和结束数据包, 并且数据包的源或目的不是本地网络上的主机.(nt: localnet, 实际使用时要真正替换成本地网络的名字))
    tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0 and not src and dst net localnet'
    打印所有源或目的端口是80, 网络层协议为IPv4, 并且含有数据,而不是SYN,FIN以及ACK-only等不含数据的数据包.(ipv6的版本的表达式可做练习)
    tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

    使用tcpdump抓取HTTP包
    tcpdump -XvvennSs 0 -i eth0 tcp[20:2]=0x4745 or tcp[20:2]=0x4854
    0x4745 为"GET"前两个字母"GE",0x4854 为"HTTP"前两个字母"HT"。

    5.curl

    curl是利用URL语法在命令行方式下工作的开源文件传输工具。它被广泛应用在Unix、多种Linux发行版中,并且有DOS和Win32、Win64下的移植版本。
    curl命令是一个功能强大的网络工具,它能够通过http、ftp等方式下载文件,也能够上传文件,同时支持HTTPS等众多协议,还支持POST、cookies、认证、从指定偏移处下载部分文件、用户代理字符串、限速、文件大小、进度条等特征。其实curl远不止前面所说的那些功能,大家可以通过man curl阅读手册页获取更多的信息。类似的工具还有wget。curl命令使用了libcurl库来实现,libcurl库常用在C程序中用来处理HTTP请求,curlpp是libcurl的一个C++封装,这几个东西可以用在抓取网页、网络监控等方面的开发,而curl命令可以帮助来解决开发过程中遇到的问题。

    常用参数:

    -a/--append 上传文件时,附加到目标文件
    -A:随意指定自己这次访问所宣称的自己的浏览器信息
    -b/--cookie <name=string/file> cookie字符串或文件读取位置,使用option来把上次的cookie信息追加到http request里面去。
    -c/--cookie-jar 操作结束后把cookie写入到这个文件中
    -C/--continue-at 断点续转
    -d/--data HTTP POST方式传送数据
    --data-ascii 以ascii的方式post数据
    --data-binary 以二进制的方式post数据
    --negotiate 使用HTTP身份验证
    --digest 使用数字身份验证
    --disable-eprt 禁止使用EPRT或LPRT
    --disable-epsv 禁止使用EPSV
    -D/--dump-header 把header信息写入到该文件中
    --egd-file 为随机数据(SSL)设置EGD socket路径
    --tcp-nodelay 使用TCP_NODELAY选项
    -e/--referer 指定引用地址
    -F/--form <name=content> 模拟http表单提交数据
    --form-string <name=string> 模拟http表单提交数据
    -G/--get 以get的方式来发送数据
    -H/--header

    指定请求头参数
    --ignore-content-length 忽略的HTTP头信息的长度
    -i/--include 输出时包括protocol头信息
    -I/--head 仅返回头部信息,使用HEAD请求
    -k/--insecure 允许不使用证书到SSL站点
    -K/--config 指定的配置文件读取
    -l/--list-only 列出ftp目录下的文件名称
    --limit-rate 设置传输速度
    --local-port 强制使用本地端口号
    -m/--max-time 指定处理的最大时长
    --max-redirs 设置最大读取的目录数
    --max-filesize 设置最大下载的文件总量
    -o/--output 指定输出文件名称
    -O/--remote-name 把输出写到该文件中,保留远程文件的文件名
    -v/--verbose 小写的v参数,用于打印更多信息,包括发送的请求信息,这在调试脚本是特别有用。
    -s/--slient 减少输出的信息,比如进度
    --connect-timeout 指定尝试连接的最大时长
    -x/--proxy <proxyhost[:port]> 指定代理服务器地址和端口,端口默认为1080
    -u/--user <user[:password]>设置服务器的用户和密码
    -r/--range 检索来自HTTP/1.1或FTP服务器字节范围
    --range-file 读取(SSL)的随机文件
    -R/--remote-time 在本地生成文件时,保留远程文件时间
    --retry 指定重试次数
    --retry-delay 传输出现问题时,设置重试间隔时间
    --retry-max-time 传输出现问题时,设置最大重试时间
    -s/--silent 静默模式。不输出任何东西
    -S/--show-error 显示错误
    --socks4 <host[:port]> 用socks4代理给定主机和端口
    --socks5 <host[:port]> 用socks5代理给定主机和端口
    --stderr
    -x/--proxy <host[:port]> 在给定的端口上使用HTTP代理
    -X/--request 指定什么命令。curl默认的HTTP动词是GET,使用-X参数可以支持其他动词。
    -T/--upload-file 指定上传文件路径

    示例:

    (1)、抓取cokkie信息到一个文件中
    curl -c cookie0.txt -d "username=*&password=" http://www.kuaipan.cn/accounts/login/

    (2)、get方法获取信息
    curl -G -I -o xsrf.txt -b cookie1.txt -c cookie2.txt http://web.kuaipan.cn/n/drive/home.tmpl/upload

    (3)、模拟表单信息,模拟登录,保存cookie信息
    curl -c ./cookie_c.txt -F log=aaaa -F pwd=****** http://blog.51yip.com/wp-login.PHP

    (4)、模拟表单信息,模拟登录,保存头信息
    curl -D ./cookie_D.txt -F log=aaaa -F pwd=****** http://blog.51yip.com/wp-login.php

    (5)、显示抓取错误
    curl -f http://blog.51yip.com/asdf
    curl http://blog.51yip.com/asdf

    (6)、伪造来源地址,有的网站会判断,请求来源地址
    curl -e http://localhost http://blog.51yip.com/wp-login.php

    (7)、当我们经常用curl去搞人家东西的时候,人家会把你的IP给屏蔽掉的,这个时候,我们可以用代理
    curl -x 24.10.28.84:32779 -o home.html http://blog.51yip.com
    curl -L -x 127.0.0.1:13128 http://detail.tmall.com/item.htm?id=25823396605

    (8)、分段下载
    curl -r 0-100 -o img.part1 http://blog.51yip.com/wp-content/uploads/2010/09/compare_varnish.jpg

    (9)、发送POST请求
    传输文件:curl -F "blob=@tmp.txt;type=text/plain" localhost:8080/request_body
    普通post请求:curl -d "method=searchone&module=seller&user_name=wb-liqiu&nickname=dd" -H"Host:fmp.view.lz.taobao.com" "10.235.160.141:8082/api.php"

    (10)、自动跳转
    curl -L http://item.taobao.com/item.htm?id=25823396605

    (11)、显示头信息
    curl -i www.baidu.com

    (12)、显示通信过程
    curl -v www.baidu.com

  • 相关阅读:
    火狐浏览器修改userAgent
    清除linux缓存命令
    linux主机间复制文件
    解决两台centos虚拟机Telnet服务无法联机的问题
    Install Redis on CentOS 6.4--转
    解决 ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510)异常
    主机访问虚拟机中linux上的web服务
    How can I exclude directories from grep -R?
    RPM安装命令总结--转载
    centos mongodb安装及简单实例
  • 原文地址:https://www.cnblogs.com/tongxiaoda/p/7452173.html
Copyright © 2011-2022 走看看