ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

从抓包到伪造:SEED Labs嗅探与欺骗实验全解析

从抓包到伪造:SEED Labs嗅探与欺骗实验全解析 1. 为什么大学安全课程都在用这个实验切入如果你去翻国内外高校的网络安全课程大纲会发现一个有趣的现象很多课的第一或第二个实验不是去打CTF不是去写漏洞利用而是做Packet Sniffing and Spoofing。我当年做这个SeedLab实验的时候也没太当回事觉得不就是抓个包嘛直到后来从事安全相关工作、再回头看这个实验的设计才意识到它的精巧之处。SeedLab即SEED Labs是雪城大学Wenliang Du教授发起的一套安全实验项目目标是让学生通过动手做来理解安全的底层机制。Packet Sniffing and Spoofing Lab是整套实验的开篇之一它要求学生利用工具和编程手段在局域网内抓取网络数据包并且伪造数据包。听起来简单但它的核心意义在于它把网络协议不设防这件事从抽象概念变成了可触碰的现实。Wireshark大家都用过打开图形界面选个网卡包就哗啦啦出来了。但绝大多数人没有想过背后发生了什么网卡是怎么把所有流经它的数据都收下来的混杂模式到底改了什么为什么抓包能抓到别人的数据但又不是所有情况都能抓到同样Scapy这种工具能发任意构造的包它的构造逻辑和TCP/IP协议栈的关系是什么这个实验正好把这两个知其然不知其所以然的点用实验任务的方式强制你搞明白。它的目标用户非常清晰正在上网络或安全课程的学生、刚入行想搞懂网络底层机制的安全爱好者、以及已经在做安全工作但想巩固基础的从业者。我个人的建议是就算你不是学生只要你想真正理解网络攻击与防御的基本逻辑这个实验都值得做一遍。因为它涵盖的技术点——包捕获原理、BPF过滤器、ARP欺骗、数据包伪造——正是大量高级攻击手段的底层地基。下面我结合自己做实验的过程把每一个关键环节、原理、坑和心得都拆开讲一遍。我尽量按照实验本身的推进顺序来写这样你既可以当教程参考也可以当复盘笔记读。2. 包嗅探的底层机制从网卡到用户态做嗅探实验之前首先要回答一个问题为什么网卡能看到不属于自己的数据这个问题的答案决定了你对整个抓包原理的理解深度。2.1 网卡的五种接收模式网卡在出厂时有一个基本行为当数据帧到达网卡时它会检查目标MAC地址。如果目标MAC不是自己的也不是广播地址或组播地址网卡会在硬件层面直接丢弃这个帧根本不会把它传给操作系统。这是网卡的正常接收模式也被称为非混杂模式。但网卡还有另一种工作状态叫做混杂模式。开启混杂模式后网卡放弃MAC地址过滤所有到达该网卡的数据帧都会被接收并向上传递。这就是抓包工具能捕获到局域网内其他主机流量的硬件前提。在Linux系统里你可以通过ifconfig命令看到网卡的标志位变化。网卡正常工作时有RUNNING标志进入混杂模式后会出现PROMISC标志。当然现代系统更推荐用ip命令但ifconfig看PROMISC这个标志确实更直观。需要特别注意的是开启混杂模式需要root权限这本身就是内核的一个安全设计。普通用户在没有CAP_NET_ADMIN或CAP_NET_RAW能力的情况下无法让网卡进入混杂模式。2.2 抓包的第二道关卡BPF过滤器网卡把数据包交上来之后数据帧会进入内核协议栈。但抓包工具要拿到数据还需要内核提供一套接口把数据包从协议栈里复制一份给用户态程序。Linux上这套接口的基础是AF_PACKET套接字而BPFBerkeley Packet Filter则是运行在这套接口上的过滤器。BPF最早由Steven McCanne和Van Jacobson在1993年提出它设计的初衷就是在内核态完成包过滤避免把无关数据包全部复制到用户态从而降低系统开销。你可以把BPF理解成一个运行在内核里的虚拟机它执行一段过滤程序每个到达的数据包都会被这段程序判定为保留或丢弃。Wireshark和tcpdump的抓包过滤器最终都会被编译成BPF字节码再加载到内核里。这也是为什么抓包时你能指定只抓TCP端口80的包它会直接在内核层面帮你过滤掉大量无关数据而不是把包全部复制到用户空间再过滤。2.3 从网卡到Wireshark之间的完整链路理解了上面两层机制整个抓包链路就清晰了网卡开启混杂模式 → 内核协议栈数据包被复制到AF_PACKET套接字缓冲区 → BPF过滤内核态判断是否保留 → 用户态程序Wireshark/tcpdump/Scapy这个链路中任何一个环节断了都可能导致抓不到包。最常见的几种断链情况我在实际做实验时都遇到过后文会专门讲排查方法。2.4 如何验证混杂模式是否生效在SeedLab环境中我习惯用以下命令快速验证网卡状态# 查看网卡接口列表和状态 ip link show # 查看是否进入混杂模式如果有PROMISC字样说明已开启 ifconfig eth0 # 查看当前生效的抓包过滤规则 tcpdump -d tcp port 80tcpdump -d这个命令很有意思它会把过滤表达式编译成BPF汇编指令打印出来能直观看到tcp port 80被转换成了什么样的比较指令。做实验时不妨跑一下这个命令你会发现过滤器本质上就是一连串的偏移量读取和数值比较这能帮你建立起对BPF更具体的认知。3. 实验环境的搭建容器化网络里的那些坑SeedLab实验环境最常用的是基于Ubuntu的虚拟机镜像里面预装了Docker每个实验通过启动一组容器来构建网络拓扑。我强烈建议按照官方文档使用VMware或VirtualBox运行提供的镜像而不是自己手动从零配置因为实验环境里的网络拓扑、容器IP、用户账号都是调试好的手动搭建很容易在环境问题上消耗大量时间。3.1 我使用的环境清单我自己跑这个实验时的环境如下供参考主机Windows 11用于运行虚拟机软件虚拟机软件VMware Workstation 16客户机SEED Ubuntu 20.04 VM官方镜像实验文件seed-labs-master/sniffing_spoofing/核心工具tcpdump、Wireshark、ScapyPython库3.2 文件的三种写法与Scapy的版本差异实验文件中提供了三个Python文件sniff.py、spoof.py、sniff_spoof.py分别对应嗅探、伪造、嗅探加伪造三个任务。这里有一个非常关键的坑Scapy的API在2.x版本中发生了重要变化不同版本的实验指导书中的代码风格可能不一致。在Scapy 2.x中sniff()函数接收prn参数来指定回调函数回调函数收到的是数据包对象。而老版本的实验代码有时会使用callback参数或者直接遍历pkts列表。如果你用的Scapy版本较新直接用实验书上的旧代码可能会报TypeError: sniff() got an unexpected keyword argument。我在SeedLab实验环境里运行时用下面的写法是最稳妥的#!/usr/bin/env python3 from scapy.all import * def packet_callback(packet): print(packet.summary()) # 抓包50个后自动停止 sniff(ifaceeth0, count50, prnpacket_callback)如果你的环境里没装Scapy用镜像自带的Python环境一般已经装好了。万一没有先执行sudo pip3 install scapy3.3 容器网络的IP划分与攻击面SeedLab的这个实验通常涉及三台机器攻击机你的虚拟机、主机A一个容器、主机B另一个容器。默认情况下三者在同一个子网内IP段为10.9.0.0/24。这个网络设计的核心意义在于同一个广播域内的所有主机都能收到彼此的ARP广播和数据帧这就为嗅探和伪造提供了物理基础。如果你把主机A放到另一个子网中间隔着一个路由器抓包和伪造的难度和性质就完全不一样了。这引出一个重要概念嗅探和伪造攻击的有效范围取决于你在网络拓扑中的位置。数据包经过的每一跳都是潜在的攻击点。这就是为什么我们不信任共享网络——因为共享网络本身在链路层就是透明的。4. 嗅探实操从Python脚本到真实抓包4.1 第一段能跑通的嗅探脚本实验的第一个任务很简单写一个能抓包的Python脚本并用它抓取ICMP包。最简版本如下#!/usr/bin/env python3 from scapy.all import * def show_packet(pkt): if ICMP in pkt: print(源IP:, pkt[IP].src, - 目标IP:, pkt[IP].dst) print(ICMP类型:, pkt[ICMP].type, 代码:, pkt[ICMP].code) sniff(ifaceeth0, prnshow_packet, filtericmp, count10)保存为sniff_icmp.py用sudo运行然后在另一个终端里ping一个同网段的IPsudo python3 sniff_icmp.py # 新开一个终端 ping -c 3 10.9.0.1此时脚本会打印出ICMP请求和回显包的源IP和目标IP以及ICMP的type和code。请求包type8回显包type0这是ICMP回显协议的基本编码。4.2 BPF过滤器语法从基础到组合实验要求你设置不同的BPF过滤器抓取特定协议、特定主机、特定端口的包。这是抓包实操的核心技能。基础语法分三大类按协议过滤sniff(ifaceeth0, filtericmp, prnshow_packet) sniff(ifaceeth0, filtertcp, prnshow_packet) sniff(ifaceeth0, filterudp, prnshow_packet)按主机过滤# 源或目标是10.9.0.5 sniff(ifaceeth0, filterhost 10.9.0.5, prnshow_packet) # 只抓源地址是10.9.0.5的包 sniff(ifaceeth0, filtersrc host 10.9.0.5, prnshow_packet) # 只抓目标地址是10.9.0.5的包 sniff(ifaceeth0, filterdst host 10.9.0.5, prnshow_packet)按端口过滤# TCP 23端口Telnet的包这是明文协议的代表 sniff(ifaceeth0, filtertcp port 23, prnshow_packet) # TCP 80端口的包 sniff(ifaceeth0, filtertcp port 80, prnshow_packet) # 端口范围 sniff(ifaceeth0, filtertcp portrange 1-1024, prnshow_packet)组合条件用逻辑运算符连接# 从10.9.0.5来且目标是80端口 sniff(ifaceeth0, filtersrc host 10.9.0.5 and tcp port 80, prnshow_packet) # 不是ICMP的所有包 sniff(ifaceeth0, filternot icmp, prnshow_packet)4.3 Wireshark中的过滤器与BPF的关系Wireshark里有两类过滤表达式一个是抓包过滤器Capture Filter语法和tcpdump一样本质是BPF另一个是显示过滤器Display Filter语法完全不同只在用户态过滤已经抓到缓冲区里的包。做SeedLab实验时很多人会在Wireshark的显示过滤器里输tcp.port 80然后在抓包过滤器里也输tcp.port 80结果发现有时候能用有时候报错。原因很简单两类过滤器语法不通用。抓包过滤器用的是BPF表达式显示过滤器用的是Wireshark自研的语法。建议大家做实验时尽量用Scapy或tcpdump来熟悉BPF语法因为BPF语法是跨工具的标准你在命令行里会的东西放到任何基于libpcap的工具里都能用。4.4 一个陷阱为什么同一子网却抓不到包我做这个实验时第一次用自己的虚拟机访问外部网站然后在容器A里抓包结果什么都没抓到。检查了很久才发现问题容器A的网卡连接的是NAT网络我的外部流量根本不会经过这个容器的网卡。嗅探有一个最朴素的道理你只能抓到你所在链路层域内的数据。如果数据包不经过你的网卡或者你的网卡没有进入混杂模式抓不到就是正常的。排查抓包问题的顺序应该是确认抓包接口正确ip addr查看接口名实验里通常是eth0确认接口开启了混杂模式ifconfig eth0里有PROMISC确认流量确实经过这个接口用ping对端IP验证确认BPF过滤条件没写错可以先不设filter抓所有包试试确认权限足够sudo运行脚本如果以上都没问题还抓不到考虑虚拟化环境的网卡模型。VMware的网卡默认有一种仅主机模式或NAT模式的隔离性可能影响包的可视范围。切换到桥接模式或者使用实验自带的容器网络通常能解决。5. 包伪造原理为什么你能伪装成任何人嗅探是被动的伪造则是主动的。实验的第二大任务是让你用Scapy构造一个任意源IP的ICMP包并发送给目标主机。5.1 Scapy构造数据包的基本APIScapy构造一个IP包的方式非常直观#!/usr/bin/env python3 from scapy.all import * # 构造一个ICMP包源IP伪装成1.2.3.4目标是10.9.0.5 ip IP() ip.src 1.2.3.4 ip.dst 10.9.0.5 icmp ICMP() packet ip / icmp # 发送这个包 send(packet, verbose1)运行后回到目标主机10.9.0.5上用tcpdump抓包你会看到源地址为1.2.3.4的ICMP包到达了。但如果你在目标主机上ping 1.2.3.4大概率是没有回应的因为1.2.3.4是个不存在的地址。这个实验的巧妙之处就在于伪造源IP很容易但要收到回包很难因为你伪造的地址不在你的控制范围内。5.2 IP层到底有哪些字段可以被伪造很多人以为伪造就是改源IP其实Scapy能让你自由设置IP头部的几乎所有字段。以下是IP协议头部的核心字段及作用字段作用伪造的意义versionIP版本号IPv4固定为4一般不改ihlIP头部长度一般不手改tos服务类型可以设置优先级很少用len总长度Scapy自动计算id标识符分片重组用可随机对某些ACL绕过有意义flags分片标志可设置DF禁止分片frag分片偏移手工构造分片攻击时用ttl生存时间可以改影响traceroute结果proto上层协议1ICMP6TCP17UDP可伪造但上层协议头也需匹配checksum头部校验和Scapy自动计算src源IP地址最常伪造的字段dst目标IP地址正常该填目标机地址实际攻击中ttl、id、src这些字段常常被精心设置目的是为了绕过防火墙规则或者躲避流量分析。但在SeedLab这个实验里核心要掌握的是src的伪造和协议栈对包的处理逻辑。5.3 为什么伪造的包能通过内核协议栈发出去这个问题值得深入聊一下。当你用Scapy的send()函数发一个伪造源IP的包时这个包是怎样从你的机器发出去的这里有一个关键设计Scapy使用raw socket直接构造链路层帧绕过了操作系统的路由决策和IP层源地址选择逻辑。普通应用程序比如浏览器、ping命令调用socket API时内核协议栈会自动选择合适的源IP、计算校验和、维护路由表。但raw socket允许你在报文进入内核协议栈之前自己组装整个IP报文甚至以太网帧头。这也是为什么构造伪造源IP的包只需要root权限而不需要一个特殊网卡。普通用户没有创建raw socket的权限这是系统安全机制的一部分。5.4 验证伪造成果从目标机的视角看实验要求你从目标机的tcpdump视角确认伪造包已到达。我们在10.9.0.5容器里执行tcpdump -i eth0 -n icmp然后回到攻击机执行伪造脚本。正常情况下tcpdump会输出类似10:23:45.123456 IP 1.2.3.4 10.9.0.5: ICMP echo request, id 1, seq 1, length 8看到这个输出说明伪造成功数据包确实到达了目标机。这里有一个值得停下来思考的问题数据包到达了目标机但目标机的协议栈会怎么处理它如果目标机收到一个来自1.2.3.4的ICMP Echo Request它会在路由表中查找1.2.3.4应该走哪个接口然后构造一个目标地址为1.2.3.4的回显包。但对于一个不存在的地址这个回显包在发出去之后不会有任何回应因为1.2.3.4根本没有主机在听。如果是通过真实存在的另一台主机来伪造那回包路径就完全不同了这就涉及到更高级的盲攻击和中间人攻击逻辑了。6. 嗅探与伪造的结合ARP欺骗实战实验的最后一部分也是整个实验最有含金量的部分是把嗅探和伪造结合起来实现一个经典的中间人攻击场景让主机A以为你在和它通信实现双向欺骗。6.1 ARP协议为什么这么容易骗ARPAddress Resolution Protocol用于在IPv4网络中将IP地址解析为MAC地址。当一个主机知道目标IP但不知道目标MAC时它会在局域网内广播一个ARP请求谁的IP是10.9.0.6请告诉我你的MAC地址。然后持有该IP的主机会回复一个ARP应答我是10.9.0.6我的MAC是aa:bb:cc:dd:ee:ff。问题出在ARP应答是没有任何认证机制的任何主机都可以发送ARP应答声称自己是某个IP地址。接收方收到ARP应答后会无条件更新自己的ARP缓存表。这意味着在一台主机上你可以告诉它10.9.0.6的MAC是攻击机的MAC它的缓存就真的这么记了。6.2 Scapy构造ARP伪造包在SeedLab里攻击机的MAC和IP是已知的目标主机A的IP是10.9.0.5目标主机B的IP是10.9.0.6。攻击机要做的两件事第一告诉10.9.0.510.9.0.6的MAC是攻击机的MACfrom scapy.all import * # 以太网帧目标MAC是主机A的MAC源MAC是攻击机的MAC 以太网 Ether(dst主机A的MAC, src攻击机的MAC) # ARP包声明10.9.0.6的MAC是攻击机的MAC arp ARP() arp.psrc 10.9.0.6 # 声称的IP arp.hwsrc 攻击机的MAC # 声称的MAC arp.pdst 10.9.0.5 # 目标是谁 arp.op 2 # 2表示ARP应答 packet 以太网 / arp sendp(packet, verbose1)第二告诉10.9.0.610.9.0.5的MAC是攻击机的MAC以太网2 Ether(dst主机B的MAC, src攻击机的MAC) arp2 ARP() arp2.psrc 10.9.0.5 arp2.hwsrc 攻击机的MAC arp2.pdst 10.9.0.6 arp2.op 2 packet2 以太网2 / arp2 sendp(packet2, verbose1)第一段代码用了sendp而不是send这很关键sendp是在链路层发送需要你手动指定以太网帧头而send是在IP层发送会自动封装以太网头。对于ARP这种工作在链路层之上的协议必须用sendp。6.3 一个关于ARP缓存更新的坑伪造ARP包发出后你需要验证目标主机是否真的更新了缓存。用arp命令查看# 在主机A容器里执行 arp -n理想情况下你会看到10.9.0.6这一行的MAC地址变成了攻击机的MAC。但在某些系统或某些情况下你可能发现缓存没有更新原因有几个ARP缓存有有效期如果目标主机刚刚通过真实ARP解析过对端地址缓存可能还处于有效状态操作系统可能忽略你发来的ARP应答。Linux的ARP缓存过期时间通常在几十秒到几分钟之间具体取决于内核参数。接口状态如果目标主机的ARP请求还是间隔发送且你的伪造包是在真实应答之后到达的那么真实应答会覆盖你的伪造。某些系统开启了ARP忽略或ARP过滤比如Linux内核的arp_ignore和arp_filter参数会影响对ARP包的处理。解决这个问题的实用技巧在发送伪造包前先持续发送一段时间的ARP广播比如每秒发一次确保目标主机缓存的旧条目被刷新。SeedLab的实验指导中也提到持续发送伪造ARP可以维持欺骗效果。6.4 被欺骗之后主机A发的包去哪了当你成功欺骗了主机A让它以为10.9.0.6的MAC是攻击机时主机A发往10.9.0.6的所有数据包目的地MAC会被设为攻击机的MAC。这些数据包会到达攻击机的网卡但由于IP层目标地址不是攻击机的IP内核协议栈会把这些包丢弃除非开启IP转发。要让中间人攻击真正通攻击机需要开启IP转发把这些包重新路由出去sudo sysctl net.ipv4.ip_forward1开启转发后主机A发往10.9.0.6的包会经过攻击机攻击机再根据路由表把这些包发往真实的10.9.0.6主机。这样主机A和主机B之间的通信数据全部经过攻击机而双方以为自己是在直接通信。这就是经典的中间人位置。6.5 进阶在Scapy中实现双重欺骗并保持连接实验最后一个任务是写一个脚本一边保持欺骗一边转发数据包。在实际操作中我推荐的策略是双线程一个线程持续发送ARP欺骗包另一个线程用sniff()抓取目标流量并转发。Scapy中的转发可以用以下方式实现抓到一个包后把它的以太网目标地址改回真实目标机的MAC把源地址改回自己的MAC然后重新发送到正确的接口。这里要注意重新发送时不要用send()IP层发送要用sendp()链路层发送否则内核会重新封装以太网头导致MAC地址错误。7. 防御视角做完了攻击实验如何防住它很多学生做完这个实验觉得学会了攻击但实验真正的价值在于理解防御。从防御者的角度回看整个实验你会明白为什么局域网安全管理这么重要。7.1 ARP欺骗的检测思路用静态ARP表在关键服务器上手动绑定网关的IP和MAC地址避免动态ARP解析。命令是arp -s 10.9.0.1 00:11:22:33:44:55。但缺点是IP或MAC变化时需要手动维护。用ARP监控工具持续监控局域网内的ARP流量对异常的ARP应答比如短时间内大量不同IP声称同一MAC发出告警。常见的工具有arpon、arpwatchWireshark也可以在显示过滤器中写arp.opcode 2 arp.src.proto_ipv4 ! 网关IP来检测可疑的ARP应答。开启DAIDynamic ARP Inspection在支持该功能的交换机上开启DAI交换机根据DHCP Snooping表来校验ARP包的合法性非法ARP包直接丢弃。这是企业级网络常用的手段。7.2 嗅探的防御思路嗅探本身很难完全防御因为它是被动接收。但我们可以减少被嗅探的损失敏感信息传输必须使用加密协议SSH替代TelnetHTTPS替代HTTP即使是内网传输也不要在明文协议里传密码网络分段敏感业务放在独立的VLAN里避免和普通用户共享广播域7.3 伪造包的防御思路伪造攻击的根源在于网络层缺乏源地址验证。目前主流的防御手段有两种出口过滤Egress Filtering边界路由器在转发流出数据包时检查源IP是否属于内部网络地址段如果不是就丢弃。这能有效阻断伪造内部IP的外部攻击。入口过滤Ingress Filtering边界路由器在接收流入数据包时检查源IP是否属于对端应使用地址段防止伪造外部IP的攻击。BCP38Best Current Practice 38就是专门讲这个的。8. 实操排错我在实验里踩过的五个典型坑8.1 坑一Scapy的send与sendp混用前面提到了send是IP层发送sendp是链路层发送。如果你构造了一个含有Ether层的包却用了send()Scapy会报错或行为异常。反过来如果构造的是只有IP层的包用了sendp()则可能需要额外指定接口和链路层信息。我的建议是如果你手动设置了Ether层就统一用sendp如果没有手动设置链路层就用send。不要交替使用也不要凭感觉猜。8.2 坑二抓包脚本卡死不返回sniff()默认会一直抓下去如果你设置了count10抓满10个包才会返回。但在某些场景下比如没有流量经过脚本看起来就像卡死了。这不是bug而是确实没有匹配流量。调试时可以临时去掉filter先把所有包打出来看看流量是否正常再逐步加上过滤条件定位。8.3 坑三ARP缓存刷新太慢导致看不到欺骗效果如果你发出伪造ARP包后arp -n看到的还是真实MAC大概率是缓存还没过期。可以手动清空ARP缓存再测试sudo ip neigh flush all或者重启目标容器强制系统重新进行ARP解析这个时候你的伪造包就能抢在真实应答前被接受了。8.4 坑四容器内tcpdump提示权限不足在Docker容器里如果容器不是以privileged模式启动的tcpdump抓包可能会提示权限不足。SeedLab提供的docker-compose文件默认已经处理好了权限问题但如果你自己用docker run起容器需要加参数docker run --privileged --networkhost -it your_image8.5 坑五用错接口导致抓包为空容器里可能有多个网络接口比如eth0、lo等。抓不到包时先用ip addr确认流量会经过哪个接口。ping同一子网的另一台机器流量走eth0ping本机回环走lo。抓包接口不对其他都是白搭。9. 实验做完之后如何举一反三Packet Sniffing and Spoofing Lab做好之后你会发现后面很多高级安全实验的底层套路都离不开这两个基本能力。如果你想继续深入建议按以下方向扩展一是把实验从ICMP扩展TCP和UDP。尝试伪造一个TCP SYN包观察目标主机的响应再尝试伪造一个UDP包丢给一个监听特定端口的服务看它是否处理来自伪造源IP的请求。二是结合TLS理解加密应对嗅探的价值。做一个对比实验先抓取HTTP明文流量再用HTTPS访问同样的服务观察Wireshark里看到的信息差异。这个对比会让你对加密不解决所有问题但解决隐私问题有直观感受。三是阅读SEED Labs后面的相关实验比如ARP Cache Poisoning Attack Lab、IP 层攻击实验、TCP攻击实验。它们都大量复用本实验的抓包和伪造技能只是目标协议不同。四是可以去了解一下libpcap和libnet库的接口它们是tcpdump、Scapy等工具的底层依赖。理解了C库的调用方式你对抓包和发包的理解会再上一个量级因为Scapy本质上就是把libpcap的操作封装成了Python对象。最后分享一个我在做完实验后养成的习惯每到一个不熟悉的网络环境先开着tcpdump观察几分钟流量。这跟我做这个实验前的习惯完全不同以前上线服务只看端口通不通、进程起没起现在会习惯性地问自己这个链路上有没有我不希望出现的主机在监听我的服务有没有在明文协议上传敏感信息这些问题就是这个实验教给我的底层安全意识。
返回列表