Scapy路由

Scapy需要知道许多与您的机器的网络配置相关的事情,以便能够正确地路由数据包。例如,接口列表、IPv4和IPv6路由。。。

这意味着Scapy已经实现了绑定来获取这些信息。这些绑定是操作系统特有的。这将向您展示如何将其用于不同的用途。

注解

Scapy将在一些高级功能的基础上具有操作系统特定的功能。本页只展示跨平台的

列出接口

使用 get_if_list() 获取接口列表

>>> get_if_list()
['lo', 'eth0']

您也可以使用 conf.ifaces 对象来获取接口。在本例中,对象首先显示为列。然后 dev_from_index() 用于访问索引2处的接口。

>>> conf.ifaces
SRC  INDEX  IFACE  IPv4       IPv6                      MAC
sys  2      eth0   10.0.0.5   fe80::10a:2bef:dc12:afae  Microsof:12:cb:ef
sys  1      lo     127.0.0.1  ::1                       00:00:00:00:00:00
>>> conf.ifaces.dev_from_index(2)
<NetworkInterface eth0 [UP+BROADCAST+RUNNING+SLAVE]>

IPv4路由

注解

如果要更改或编辑路线,请查看 the "Routing" section in Usage

这些路线都在 conf.route . 您可以使用它来显示路由,或获取特定的路由

>>> conf.route

Network          Netmask          Gateway   Iface  Output IP  Metric
0.0.0.0          0.0.0.0          10.0.0.1  eth0   10.0.0.5   100
10.0.0.0         255.255.255.0    0.0.0.0   eth0   10.0.0.5   0
127.0.0.0        255.0.0.0        0.0.0.0   lo     127.0.0.1  1
168.63.129.16    255.255.255.255  10.0.0.1  eth0   10.0.0.5   100
169.254.169.254  255.255.255.255  10.0.0.1  eth0   10.0.0.5   100

获取特定IP的路由: conf.route.route() 将返回 (interface, outgoing_ip, gateway)

>>> conf.route.route("127.0.0.1")
('lo', '127.0.0.1', '0.0.0.0')

IPv6路由

与IPv4相同,但 conf.route6

获取路由器IP地址

>>> gw = conf.route.route("0.0.0.0")[2]
>>> gw
'10.0.0.1'

获取接口的本地IP/IP

使用 conf.iface

>>> ip = get_if_addr(conf.iface)  # default interface
>>> ip = get_if_addr("eth0")
>>> ip
'10.0.0.5'

获取接口的本地MAC/MAC

>>> mac = get_if_hwaddr(conf.iface)  # default interface
>>> mac = get_if_hwaddr("eth0")
>>> mac
'54:3f:19:c9:38:6d'

通过IP获取MAC

>>> mac = getmacbyip("10.0.0.1")
>>> mac
'f3:ae:5e:76:31:9b'