python_scapy铸造,发送数据包

本文介绍了如何使用Python的Scapy模块创建和发送数据包。从构造简单的以太网/IP/TCP数据包开始,到构建ping数据包,并通过sr1函数发送并接收回应。讲解了sr()、sr1()、srp()和send()等函数的用法,帮助读者理解Scapy在数据包收发中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


使用python的scapy模块发送并接收数据包

1.使用scapy构造简单的数据包

   packet=Ether()/IP()/TCP()

   scapy会默认的填上一些初始化的数据,默认的以太二层为一个广播,源mac会自动填上网卡的地址(如不修改)。

   通过packet.show()方法可以查看数据包的结构和初始化数据。

  


2.使用scapy构造一个ping数据包。

   packet=IP(dst='192.168.219.1')/ICMP()/b'rootkit'

   使用packet.show()来查看构造的数据包


  请读者自行掌握ping数据包的结构,IP和ICMP。


3.使用sr1发送构造的数据包,此函数的功能是发送并等待接收一个回复的数据包。

ping=sr1(IP(dst='192.168.219.141')/ICMP()/b'rootkit'

这句话的意思是发送一个ping数据包,并等待接收一个数据包将其保存在ping变量里,

通过ping.show()查看回复的数据包。


4.收发数据包介绍

sr():发送三层数据包,等待接收一个或多个数据包的回复

sr1():发送三层数据包,并仅仅只等待接收一个数据包的响应

srp():发送二层数据包,并且等待响应

send():仅仅发送三层数据包,系统会自动处理路由和二层信息

sendp():发送二层数据包



Python中使用Scapy库时,默认情况下,发送数据包会通过系统选择的最佳路由所对应的网卡发出。但是,在某些场景下我们希望明确指定从哪一个特定的网卡来发送数据包。为了做到这一点,我们可以利用Scapy提供的`conf.iface`属性设置默认接口,也可以直接在发送函数(如`sndrcv()`、`srp()`等)里指明使用的网络接口名称。 下面是两个示例展示了如何配置及应用具体的网卡发送数据包: ### 设置全局默认网卡 如果你想让所有的数据包都经由某个固定的网卡发出,可以在程序开始处更改全局变量 `conf.iface` 来达到这一目的。比如你想把所有流量导向名为 "eth0" 的网卡,则可以这样做: ```python from scapy.all import * # 将 eth0 设定为 Scapy 默认使用的网卡 conf.iface = "eth0" # 现在这条命令将通过 eth0 接口发送 ICMP Echo 请求 (Ping) ping_result = sr1(IP(dst="example.com")/ICMP(), timeout=2) print(ping_result.show()) ``` 请注意替换 `"eth0"` 为你实际可用并且想要用来传输数据的那个物理或虚拟网卡的名字;同时也要保证有权限访问这个设备以及相关的网络资源。 ### 单次操作指定网卡 如果你只需要一次性的改变某次发包的具体路径而不影响整个环境的话,那么可以在每次调用发送方法的时候传入相应的参数即可,例如对于 `send()`, 可以这样使用: ```python from scapy.all import send, IP, TCP packet_to_send = IP(dst='target.ip.addr') / TCP(dport=80) # 直接在这个发送动作里指定使用 lo 回环网卡作为出口 send(packet_to_send, iface="lo") # 或者对更复杂的交互式收发情况下的函数: answer, unanswer = sr(packet_to_send, iface="wlan0", timeout=5) ``` 这里同样需要注意更换成适用于你当前系统的有效网卡标识符 (`iface="..."`) 并确保代码运行有足够的特权等级去操纵底层硬件设施。 此外,还可以结合 Linux 上面的高级路由机制实现更加复杂精细的控制策略,但这超出了本文讨论的基本需求范畴了。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值