Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
ofp_sniffer — OpenFlow сниффер для помощи в устранении неполадок сети в производственных сетях. | Kitploit
Инструменты/GitHubGitHub/amlight/ofp_sniffer
Сниффинг и анализ пакетовКартирование сетиСетевая безопасностьОбучение и Образование
GitHubamlight/ofp_sniffer

ofp_sniffer

OpenFlow сниффер для помощи в устранении неполадок сети в производственных сетях.

Репозиторий
15121 месяц назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

OFP_Sniffer — это сниффер OpenFlow, предназначенный для устранения неполадок и обучения.

В текущей версии 1.2 он разбирает все сообщения OpenFlow 1.0, работает с InfluxDB, Grafana и Slack. OpenFlow 1.3 будет доступен в версии OFP_Sniffer 1.3 (выйдет в ближайшее время).

Он работает непосредственно в оболочке Linux и разбирает все сообщения OpenFlow в сети или из файлов libpcap. С помощью OFP_Sniffer вы можете легко отслеживать сообщения OpenFlow и связанные с ними ошибки (если таковые имеются) без открытия X11 или Wireshark. OFP_Sniffer был написан на Python 3.6 для поддержки развертывания SDN AmLight (www.sdn.amlight.net). AmLight SDN использует Internet2 FlowSpace Firewall, OESS и On.Lab ONOS, и эти приложения были протестированы и полностью поддерживаются.

Как инструмент с интерфейсом командной строки, он имеет несколько входных параметров:

root@kitploit:~
# ./ofp_sniffer.py -h
Usage:
 ./ofp_sniffer.py [-p min|full] [-f pcap_filter] [-F filter_file] [-i dev] [-r pcap_file]
	 -p : print all TCP/IP headers. Default: min
	 -f pcap_filter or --pcap-filter=pcap_filter: add a libpcap filter
	 -F filters_file.json or --filters-file=filters.json
	 -i interface or --interface=interface. Default: eth0
	 -r captured.pcap or --src-file=captured.pcap
	 -T topology.json or --topology-file=topology.json
	 -w file or --save-to-file=file: save output to file provided
	 -o or --print-ovs : print using ovs-ofctl format
	 -h or --help : prints this help
	 -c or --no-colors: removes colors
	 -v or --version : prints version
	 -O WARN:CRIT or --oess-fvd=WARN:CRIT: monitor OESS FVD status
	 -N or --notify-via-slack: send notifications via Slack. Param is the Slack channel
	 -S or --enable-statistics: creates statistics

Начиная с версии 1.0, поддерживаются приложения для обработки конкретных потребностей, таких как отслеживание сообщений OESS FVD или создание статистики через REST и интеграция с NMS (например, Zabbix).

Подробнее: https://amlight.net/wp-content/uploads/2015/03/wpeif-2016-ofpsniffer.pdf

##################### Установка ######################

root@kitploit:~
Требуется Python 3.6
git clone https://github.com/amlight/ofp_sniffer.git
cd ofp_sniffer
pip3.6 install -r docs/requirements.txt
sudo ./ofp_sniffer.py

##################### Примеры #########################

Примеры приведены ниже:

root@kitploit:~
----------------------           -------------------------
| Mininet            |           | OVS-OFCTL 2.3.0       |
| 192.168.56.101:6634| <-------> | eth1 - 192.168.56.102 |
----------------------           -------------------------

# ovs-ofctl dump-flows tcp:192.168.56.101:6634
 cookie=0x0, duration=2183.377s, table=0, n_packets=0, n_bytes=0, idle_age=2183, in_port=1,dl_vlan=2 actions=output:2

# ./ofp_sniffer.py -i eth1 -f " or port 6634"
Sniffing device eth1
2015-09-13 11:47:38.655503 192.168.56.102:37450 -> 192.168.56.101:6634 Size: 74
OpenFlow Version: 1.0(1) Type: Hello(0) Length: 8  XID: 1
1 OpenFlow Hello

2015-09-13 11:47:38.656964 192.168.56.101:6634 -> 192.168.56.102:37450 Size: 74
OpenFlow Version: 1.0(1) Type: Hello(0) Length: 8  XID: 174
174 OpenFlow Hello

2015-09-13 11:47:38.657638 192.168.56.102:37450 -> 192.168.56.101:6634 Size: 86
OpenFlow Version: 1.0(1) Type: Vendor(4) Length: 20  XID: 2
2 OpenFlow Vendor : NICIRA(0x2320)
2 OpenFlow Vendor Data:  12  2 

2015-09-13 11:47:38.657870 192.168.56.102:37450 -> 192.168.56.101:6634 Size: 74
OpenFlow Version: 1.0(1) Type: BarrierReq(18) Length: 8  XID: 3
3 OpenFlow Barrier Request

2015-09-13 11:47:38.659270 192.168.56.101:6634 -> 192.168.56.102:37450 Size: 74
OpenFlow Version: 1.0(1) Type: BarrierRes(19) Length: 8  XID: 3
3 OpenFlow Barrier Reply

root@kitploit:~
# ovs-ofctl add-flow tcp:192.168.56.101:6634 "dl_dst=10:00:00:01:20:00,dl_type=0x88bc actions=mod_vlan_vid:14,output:2"

# ./ofp_sniffer.py -i eth1 -f " or port 6634"

2015-09-13 11:49:08.171463 192.168.56.102:37451 -> 192.168.56.101:6634 Size: 154
OpenFlow Version: 1.0(1) Type: FlowMod(14) Length: 88  XID: 2
2 OpenFlow Match - wildcards: 3678439 dl_type: 0x88bc dl_dst: 10:00:00:01:20:00
2 OpenFlow Body - Cookie: 0x00 Command: Add(0) Idle/Hard Timeouts: 0/0 Priority: 32768 Buffer ID: 0xffffffff Out Port: 65535 Flags: Unknown Flag(0)
2 OpenFlow Action - Type: SetVLANID Length: 8 VLAN ID: 14 Pad: 0
2 OpenFlow Action - Type: OUTPUT Length: 8 Port: 2 Max Length: 0

# ovs-ofctl del-flows tcp:192.168.56.101:6634 "dl_type=0x88bc,dl_dst=10:00:00:01:20:00, "

2015-09-13 11:50:43.636925 192.168.56.102:37454 -> 192.168.56.101:6634 Size: 138
OpenFlow Version: 1.0(1) Type: FlowMod(14) Length: 72  XID: 2
2 OpenFlow Match - wildcards: 3678439 dl_type: 0x88bc dl_dst: 10:00:00:01:20:00
2 OpenFlow Body - Cookie: 0x00 Command: Delete(3) Idle/Hard Timeouts: 0/0 Priority: 32768 Buffer ID: 0xffffffff Out Port: 65535 Flags: Unknown Flag(0)

# ovs-ofctl add-flow tcp:192.168.56.101:6634 "dl_dst=10:00:00:01:20:00,dl_type=0x88bc actions=mod_vlan_vid:14,output:2"

2015-09-13 11:52:58.563737 192.168.56.102:37455 -> 192.168.56.101:6634 Size: 154
OpenFlow Version: 1.0(1) Type: FlowMod(14) Length: 88  XID: 2
2 OpenFlow Match - wildcards: 3678439 dl_type: 0x88bc dl_dst: 10:00:00:01:20:00
2 OpenFlow Body - Cookie: 0x00 Command: Add(0) Idle/Hard Timeouts: 0/0 Priority: 32768 Buffer ID: 0xffffffff Out Port: 65535 Flags: Unknown Flag(0)
2 OpenFlow Action - Type: SetVLANID Length: 8 VLAN ID: 14 Pad: 0
2 OpenFlow Action - Type: OUTPUT Length: 8 Port: 2 Max Length: 0

Использование фильтров:

При использовании опции -F ./filters.json у вас будет несколько возможностей:

"rejected_of_types": используется для выбора типов сообщений OpenFlow, которые вы НЕ хотите видеть. Вы можете определить разные фильтры в зависимости от версии OpenFlow

Фильтры по Ethertype:

Если вы ищете конкретный Ethertype, передаваемый в сообщениях PacketOut или PacketIn, вы можете отклонить все остальные, что облегчит визуализацию.

Пример:

root@kitploit:~
  "filters":{
      "ethertypes": {
          "lldp" : 0,
          "fvd"  : 0,
          "arp"  : 1,
          "others": [ "88b5" ]
      },
      "packetIn_filter": {
          "switch_dpid": "any",
          "in_port": "any"
      },
      "packetOut_filter": {
          "switch_dpid": "any",
          "out_port": "any"
      }
  }
}

В разделе ethertypes 1 означает фильтровать, 0 — выводить. В приведённом примере ARP-сообщения не будут отображаться, а OESS FVD и LLDP — будут. Вы можете добавить шестнадцатеричное число Ethertype (без 0x) в раздел "others", просто разделяя запятыми (",").

"packetIn_filter": используется для определения, какие сообщения PacketIn + LLDP вы ХОТИТЕ видеть. Вы можете настроить фильтр для каждого коммутатора и/или порта. Для коммутатора необходимо использовать datapath_id так, как его видит используемое приложение. Например, одни приложения заполняют поле c_id как of:dpid_id, другие — как dpid:dpid_id. Для портов используйте OpenFlow port_id, а не имя порта. Например, на Brocade eth1/1 == 1. Поэтому используйте 1 вместо eth1/1.

"packetOut_filter": используется для определения, какие сообщения PacketOut + LLDP вы ХОТИТЕ видеть. Вы можете настроить фильтр для каждого коммутатора и/или порта. Для коммутатора необходимо использовать datapath_id так, как его видит используемое приложение. Например, одни приложения заполняют поле c_id как of:dpid_id, другие — как dpid:dpid_id. Для портов используйте OpenFlow port_id, а не имя порта. Например, на Brocade eth1/1 == 1. Поэтому используйте 1 вместо eth1/1.

Поддержка OpenFlow-прокси:

При использовании OpenFlow-прокси, в зависимости от выбранного интерфейса для сниффинга, вы увидите один из двух вариантов:

IP_Controller <-> IP_Proxy IP_Proxy <-> IP_Switch

Сложно определить, какой контроллер общается с каким коммутатором. Чтобы облегчить эту диагностику, сниффер OpenFlow автоматически отслеживает все сообщения PacketOut + LLDP для создания словаря {(IP, порт): имя_коммутатора}. Если это ваш случай, измените файл docs/topology.json. При следующем запуске сниффера вы увидите IP-адрес и в скобках устройство за прокси. Пример:

root@kitploit:~
2015-12-16 15:37:41.563621 200.0.207.79(andes1):7801 -> 190.103.184.135:6633 Size: 157 Bytes
OpenFlow Version: 1.0(1) Type: PacketIn(10) Length: 103  XID: 0
0 PacketIn: buffer_id: 0xffffffff total_len: 85 in_port: 49 reason: OFPR_NO_MATCH(0) pad: 0
0 Ethernet: Destination MAC: ff:ff:ff:ff:ff:ff Source MAC: de:ad:be:ef:ba:11 Protocol: 0x8100
0 Ethernet: Prio: 0 CFI: 0 VID: 3720
0 LLDP: Chassis Type(1) Length: 7 SubType: 4 ID: of:cc4e249102000000
0 LLDP: Port Type(2) Length: 5 SubType: 2 ID: 2
0 LLDP: TTL(3) Length: 2 Seconds: 120
0 LLDP: END(0) Length: 0

2015-12-16 15:37:41.564414 190.103.184.133(andes1):56132 -> 190.103.187.72:6633 Size: 165 Bytes
OpenFlow Version: 1.0(1) Type: PacketIn(10) Length: 99  XID: 0
0 PacketIn: buffer_id: 0xffffffff total_len: 81 in_port: 49 reason: OFPR_NO_MATCH(0) pad: 0
0 Ethernet: Destination MAC: ff:ff:ff:ff:ff:ff Source MAC: de:ad:be:ef:ba:11 Protocol: 0x8942
0 LLDP: Chassis Type(1) Length: 7 SubType: 4 ID: of:cc4e249102000000
0 LLDP: Port Type(2) Length: 5 SubType: 2 ID: 2
0 LLDP: TTL(3) Length: 2 Seconds: 120
0 LLDP: END(0) Length: 0

Имя (andes1) представляет коммутатор под названием "andes1" с DPID cc4e249126000000. Обратите внимание, что DPID в примере не совпадает, так как в качестве примера используется сообщение PacketIn. PacketIn показывает DPID соседей "andes1".

Надеюсь, этот код вам поможет.

Вопросы/Предложения: AmLight Dev Team [email protected]

Скачать инструмент