Как написать модуль ядра для просмотра таблицы маршрутов и кеша arp в ядре? - PullRequest
0 голосов
/ 07 марта 2012

Я хочу написать модуль для поиска таблицы маршрутизации в ядре для получения ip шлюза и использовать ip для поиска в кэше arp для получения mac-адреса шлюза.

Ответы [ 2 ]

1 голос
/ 02 октября 2013

fib_lookup: поиск таблицы маршрутов.Определено в net/ipv4/route.c.

ipv4_neigh_lookup: использование struct соседей (протокол ARP реализуется соседней подсистемой) для отправки SKB.

Пролистать ip_route_input_slow для получения более подробной информации о маршруте.таблица и соседняя подсистема.

1 голос
/ 07 марта 2012

Не уверен, зачем вам нужен модуль ядра для этого. Все, что вам нужно, чтобы найти адрес gw mac по умолчанию, доступно в пользовательском пространстве ...

#!/usr/bin/env python

import re
import socket
from struct import pack

hex_gateway = re.findall('\t00000000\t([0-9A-F]*)\t', open('/proc/net/route').read())[0]
if not hex_gateway: sys.exit(1)

gw_ip = socket.inet_ntoa(pack('I', int(hex_gateway, 16)))

gw_mac = False
for line in open('/proc/net/arp').readlines():
    if line.startswith(gw_ip):
        gw_mac = line.split()[3]
        break

if gw_mac:print gw_mac
else:sys.exit(1)
...