Создание запроса ARP в контроллере POX - PullRequest
0 голосов
/ 08 сентября 2018

Я пытаюсь отправить запрос ARP от коммутатора OpenFlow SDN, чтобы найти MAC-адрес предварительно определенного хоста (известен IP-адрес хоста: 10.0.0.8/24)

Я пытаюсь использовать фиктивный IP-адрес и MAC-адрес для контроллера.

  • фиктивный IP для контроллера: 10.1.2.3
  • Фиктивный MAC-адрес для контроллера: 00: 12: 34: 56: 78: 90

Пожалуйста, найдите прикрепленное изображение моей топологии

Я пытаюсь создать запрос ARP в контроллере, когда соединение между контроллером и коммутатором установлено, и передать запрос через коммутатор.

# respond to switch connection up event
def _handle_ConnectionUp(self, event):
    self.connection = event.connection
    print("connecting to %s" %(self.connection))
    # code to send ARP requests to servers


    r = arp()
    r.hwtype = r.HW_TYPE_ETHERNET
    r.prototype = r.PROTO_TYPE_IP
    r.hwlen = 6
    r.protolen = r.protolen
    r.opcode = r.REQUEST
    r.hwdst = ETHER_BROADCAST
    r.protodst = IPAddr("10.0.0.8")
    r.hwsrc = EthAddr("00:12:34:56:78:90")
    r.protosrc = IPAddr("10.1.2.3")
    e = ethernet(type=ethernet.ARP_TYPE, src=EthAddr("00:12:34:56:78:90") , dst=ETHER_BROADCAST)
    e.set_payload(r)
    msg = of.ofp_packet_out()
    msg.data = e.pack()
    msg.actions.append(of.ofp_action_output(port = of.OFPP_FLOOD))
    event.connection.send(msg)

Но я не вижу ответа ARP от host-10.0.0.8.

tcpdump от хоста прилагается к этому

Пожалуйста, дайте мне знать, если я делаю что-то не так в отношении вышеуказанного кода. Заранее большое спасибо.

1 Ответ

0 голосов
/ 11 сентября 2018

После нескольких неудачных попыток я осознал свою ошибку.

Все узлы должны находиться в одном широковещательном домене для отправки или получения ARP.Следовательно, фиктивный IP контроллера должен быть изменен на что-то вроде 10.0.0.x / 24

...