通过 Scapy 构造并发送伪造目的MAC 地址的 ICMP请求,用于探测目标主机(同一交换机下)的抓包状态【没成功】

这是我的一门课的实验内容,整了好几天了,也没成功,暂时放弃了,如果有大佬愿意指点一二,不胜感激!

工具:eNSP,Wireshark

当目的Mac地址正确时。

有响应(正常)。

当目的MAC地址错误,且目标主机没有抓包时。

没有响应(正常)。

当目的Mac地址错误,且目标主机开始抓包时。

应该有响应,但结果还是无响应(不正常)。

通过搜索(AI,因为没有从网上搜到通过伪造Mac地址来判断目标主机是否在抓包的经验),可能是协议栈的问题?但我觉得更大可能是因为我用的eNSP来模拟的原因,但我实在不想再新建一个虚拟机了,暂时先不整吧。

通过 Scapy 构造并发送伪造源 MAC 地址的 ARP 请求,用于探测目标主机的抓包状态。(又是AI给我出了另一个主意,来判断目标主机是否抓包)

目标主机抓包时,有响应。

目标主机没有抓包时,应该无响应,但结果还是有响应???!!!服了。(不正常嗷,其实我已经有点怀疑了,不会是瞎编的吧?)

<think> 我们要使用Scapy构造发送DHCP Discover报文。 首先,需要了解DHCP Discover报文的结构。DHCP Discover是客户端在初始启动时发送的广播报文,用于寻找DHCP服务器。 在Scapy中,我们可以构建一个包含Ethernet、IP、UDP和BOOTP(DHCP)的报文。 步骤: 1. 导入Scapy模块。 2. 构建以太网:由于是广播,所以目的MAC地址为"ff:ff:ff:ff:ff:ff",源MAC地址可以是本机的MAC地址,也可以使用Scapy自动填充(比如使用get_if_hwaddr获取接口的MAC地址)。 3. IP:源IP地址为0.0.0.0(因为客户端还有IP地址),目的IP地址为255.255.255.255(广播)。 4. UDP:源端口为68(客户端端口),目的端口为67(服务器端口)。 5. BOOTP:设置op为1(表示请求),chaddr为客户端MAC地址(需要与以太网MAC一致),xid(事务ID)可以随机生成,其他字段根据需要设置。 6. DHCP:在BOOTP之上,实际上DHCP选项是放在BOOTP的options字段中的。我们需要添加DHCP选项,例如消息类型(Discover)、参数请求列表等。 注意:Scapy中DHCP Discover报文的构建,通常使用BOOTP()和DHCP()组合。其中,BOOTP包含基本字段,而DHCP选项则通过DHCP(options=...)来添加。 具体实现如下: </think> 要使用 Scapy 构造发送 DHCP Discover 报文,需要理解 DHCP 协议的报文结构和交互流程。以下是详细实现方案: ### 解决方案代码 ```python from scapy.all import * import random # 获取本机MAC地址 (可选) # iface_mac = get_if_hwaddr("eth0") # 手动设置MAC地址(示例) client_mac = "00:11:22:33:44:55" # 生成随机事务ID (XID) xid = random.randint(1, 0xFFFFFFFF) # 构建DHCP Discover报文 dhcp_discover = ( Ether(dst="ff:ff:ff:ff:ff:ff") / # 以太网广播地址 IP(src="0.0.0.0", dst="255.255.255.255") / # IP广播 UDP(sport=68, dport=67) / # UDP端口:客户端68/服务器67 BOOTP( op=1, # 1=请求, 2=回复 chaddr=mac2str(client_mac), # 客户端MAC地址 xid=xid, # 随机事务ID flags=0x8000 # 广播标志位 ) / DHCP( options=[ ("message-type", "discover"), # DHCP消息类型 ("max_dhcp_size", 1500), # 最大DHCP包大小 ("client_id", mac2str(client_mac)), # 客户端标识 ("param_req_list", [1, 3, 6, 15, 31, 33]), # 请求的参数列表 "end" # 选项结束标记 ] ) ) # 发送报文(发送3次,间隔1秒) sendp(dhcp_discover, iface="eth0", count=3, inter=1, verbose=1) ``` ### 代码详解: 1. **报文结构**: - **Ether**:`dst="ff:ff:ff:ff:ff:ff"` 表示广播到所有设备 - **IP**:源IP设为 `0.0.0.0`(客户端无IP),目的IP `255.255.255.255`(广播) - **UDP**:源端口68(DHCP客户端),目的端口67(DHCP服务器) 2. **BOOTP关键字段**: - `op=1`:表示客户端请求 - `chaddr`:客户端MAC地址(需转换为二进制格式) - `xid`:随机事务ID,用于匹配请求/响应 - `flags=0x8000`:强制服务器广播回复 3. **DHCP选项**: - `message-type="discover"`:标识为Discover报文 - `client_id`:客户端标识(通常与MAC一致) - `param_req_list`:请求的配置参数(1=子网掩码, 3=网关, 6=DNS等) - `"end"`:标记选项结束 4. **发送参数**: - `iface="eth0"`:指定发送接口(根据系统修改) - `count=3`:发送3次(增加成功率) - `inter=1`:每次间隔1秒 ### 执行结果: 当运行脚本时,Scapy构造发送DHCP Discover报文。若网络中有DHCP服务器,将回复Offer报文。可使用Wireshark过滤 `dhcp` 查看交互过程。 ### 注意事项: 1. 需要**root权限**运行(因需操作原始套接字) 2. 确认网络接口名称(Windows用 `netsh int ipv4 show int` 查询) 3. 若在虚拟机测试,确保网络设置为桥接模式 4. 可能需要暂时禁用系统自带的DHCP客户端服务
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值