关于wireshark
集线器,很老的,可能现在看不到了,都是交换机了。它会产生很多不必要的网络流量。
交换机,有CAM(Content Addressable Memory)表,每个连接设备的2层地址都存在里面。这样一个数据包被传输时,读取包中的第2层的头部信息,使用CAM表作为参考,决定发往哪个或哪些端口,就降低了网络流量。
路由器在网络间转发数据包,使用第3层地址(如IP)来标识网络上的设备。家庭里可能只需要一个小的,大的企业网络可以有几个路由器分布在不同部门,再连接到汇聚路由器。
网卡驱动识别到包不是给自己的,就丢弃,不上报给CPU处理,这样可以提高性能。但如果做流量捕获,不想丢掉线路上传输的任何可能的信息,那就使用网卡的混杂模式。
交换式网络里,可以使用端口镜像,将一个或多个端口上的所有通信都镜像到另一个端口上。
或者找个集线器,专门用来输出流量(只连接对流量感兴趣的设备),算是排上用场了。当然目标设备会由全双工变成半双工。
再或者,使用ARP缓存污染技术,向客户端系统发生虚假地址的数据包,来截获网络流量,也可以用于DoS攻击。工具是Cain&Abel,安全工具,就像刀一样,用的不好就容易造成伤害。
如果是大一点的网络,在路由网络环境里,网络地图就很重要了,这样才能合理的布点。
最早是叫Ethereal,1998年以GPL发布,8年后,开发人跳槽了,公司有Ethereal的使用权,协商不一致,开发人Combs在2006年重新取名Wireshark。
看一下背景色规则:
Berkeley Packet Filter(BPF)语法很重要,它用来创建过滤器表达式
如果类型限定没有指定,默认就是host
BPF还可检测协议头中的字节来过滤。
比如最简单的,只想看echo请求(类型8),用icmp[0]==8
当然可以指示从哪个偏移开始,多长的字节,比如icmp[0:2]。奇怪的是0x0800为什么is not a valid byte string?就是多于一个字节都会报这个错。
这是因为显示过滤器不支持,而捕获过滤器是支持这样的。总之是有点奇怪,可能是4.0版本的小bug吧
在比如TCP头偏移13的字节,字节中每个位都是用于标志位,所以要这样写
tcp[13]&4==4 #代表RST标志
tcp[13]&8==8 #代表PSH标志
同样的,32URG, 16ACK, 2SYN, 1FIN.
tcp[13]==18 是tcp syn-ack数据包
显示过滤器有一个表达式功能,非常的合适新手
当然熟悉了之后,就要离开新手村,直接在窗口输入了。比如frame.len<=128看小于某字节数的数据包。
逻辑操作符 xor 有且仅有一个条件被满足
常用的比如 !tcp.port==3389 排除RDP流量
内置的显示过滤器,当然可以添加自己的方便使用
端点
endpoint 是网络上能够发送或者接收数据的一台设备
2个端点之间的通信为会话
名称解析,当然有优点也有缺点。缺点之一是解析是动态的,不会保存在捕获文件里。支持定义wireshark hosts文件来手工标识。
wireshark的优势是对于上千种广泛的协议的解析的支持,而且它是开源软件,可以给开发者一个开发协议解析/解剖器(protocol dissectors)的框架。
当wireshark依据自己的标准识别错误时,可以用decode as为特殊情况选择协议。
可以查看源码dissectors/packets-protocolname.c
识别并进行流跟踪,将2个端点的流量按某种类型的流(比如TCP流)的顺序排列,这个挺好。如果要查看SSL/TLS流的明文,需要做一些配置,当然要有私钥才行。
packet length. 想一下协议头的大小,以太网报头是14(6MAC*2+2类型+含4个CRC),IP报头至少20、没有数据及选项的TCP也是20,所以典型的TCP控制数据包,大约54字节。
另外还有I/O图表,就是流量趋势变化图
还有流量图(Flow Graph),可视化连接,可不错了。
专家信息,暂时没怎么明白它用处
tshark一般随wireshark一起安装了,是命令行的版本。解析方面(第7层)比tcpdump要强,另外-z是统计选项,tcpdump是没有的。-z help可看帮助
一个设备的IP是可以改变的,所以,免费的Gratuituos ARP会发送到网络中,强制收到他的所有设备用新的IP和MAC映射去更新缓存。它和ARP请求很像,它的发送方和接受方的IP地址相同,目标MAC是广播,因为不是由其他设备请求,却收到,所以叫免费。比如当设备IP地址改变时,会生成它,一些操作系统也会在启动时进行它的发送。
IP地址和网络掩码也会被写成无类型域间选路(Classless Inter-Domain Routing CIDR
)的形式,如10.10.1.22/16 16表示网络部分的位数
TTL可以避免数据包在路由器之间持续循环,随着循环增多,可用带宽减少,DoS出现。
比如ping一个IP,在这个IP抓包,TTL=114,当这个包发出时TTL应该是设置的128,tracert可以看到中间进过多少路由:
如果ip数据包大于网络接口MTU,那么这个数据包会被分片。当然,网络上被分片的包不怎么常见。
IPv6的第一个版本RFC2460与1998年发布。地址是128位,是Ipv4的4倍,一般用8组2字节来表示。
类型作为分类,代码可看做子类。比如类型3表示目标不可达,而code3可明确为端口不可达。可以用选项来增加ping的数据填充,这样可以检测强制分片。
Tcp端口
就像是老式电话总机上的插口。一个总机操作员会监视着一个面板上的指示灯和插头,当指示灯亮起的时候,它就会连接这个呼叫者,问他想要和谁通话,然后插一根电缆,将他和他的目的位置连接起来。每次呼叫都需要有一个源端口(呼叫者)和一个目的端口(接收者)。
RST会在尝试通信序列的开始或者在通讯的中途来终止通讯。
- 点赞
- 收藏
- 关注作者
评论(0)