scapy抓包学习
1、列出接口
使用 get_if_list()
获取接口列表
from scapy.all import sniff, rdpcap, load_layer, conf, get_if_list ifaces = get_if_list() print(ifaces)
您也可以使用 conf.ifaces
对象来获取接口。在本例中,对象首先显示为列。然后 dev_from_index()
用于访问索引2处的接口。
from scapy.all import sniff, rdpcap, load_layer, conf, get_if_list ifaces = conf.ifaces print(ifaces) print(ifaces.dev_from_index(1))
(1)IPv4路由
这些路线都在 conf.route
. 您可以使用它来显示路由,或获取特定的路由
from scapy.all import sniff, rdpcap, load_layer, conf, get_if_list routes = conf.route print(routes)
获取特定IP的路由: conf.route.route()
将返回 (interface, outgoing_ip, gateway)
from scapy.all import sniff, rdpcap, load_layer, conf, get_if_list routes = conf.route print(routes) print(routes.route("127.0.0.1"))
IPv6路由
与IPv4相同,但 conf.route6
(2)获取路由器IP地址
gw = conf.route.route("0.0.0.0")[2]
(3)获取接口的本地IP/IP
from scapy.all import get_if_addr ip = get_if_addr(conf.iface) # default interface ip = get_if_addr("Intel(R) Wireless-AC 9560 160MHz") print(ip)
(4)获取接口的本地MAC/MAC
from scapy.all import get_if_hwaddr mac = get_if_hwaddr(conf.iface) # default interface mac = get_if_hwaddr("eth0") print(mac)
(5)通过IP获取MAC
from scapy.layers.l2 import getmacbyip mac = getmacbyip("10.0.0.1") print(mac)
2、scapy支持的数据包类型
from scapy.all import ls from scapy.layers.inet import IP # 输出scapy支持的数据包类型 print(ls()) # 使用ls(IP())可以查看IP数据包的参数 print(ls(IP))
(1)构建一个数据包
(2)堆栈层
3、捕获数据包
sniff()函数
可帮助我们捕获所有流量:包括count
,filter
,iface
,lfilter
,prn
,timeout
选项。