Для извлечения определенного расширения TLS из файла .pcapng с помощью библиотеки PyShark, вам потребуется пройти через каждый пакет в вашем файле и отфильтровать необходимые данные. В случае, если расширение не является первым в списке, вам нужно будет пройти циклом через все расширения и выбрать то, которое вам нужно.
Вот пример того, как вы можете сделать это:
```python
import pyshark
# Замените 'your_file.pcapng' на путь к вашему pcapng файлу
file_path = 'your_file.pcapng'
# Открытие файла с помощью PyShark
cap = pyshark.FileCapture(file_path, display_filter='tls.handshake.type == 1') # Отбираем только сообщения handshake
for packet in cap:
# Проверяем, есть ли TLS расширения в пакете
if hasattr(packet, 'tls') and hasattr(packet.tls, 'handshake'):
# Получаем все расширения из пакета
extensions = packet.tls.handshake.extensions
for extension in extensions:
# Проверка на нужное расширение
if 'Extension: supported_versions' in str(extension):
# Выводим тип расширения
print(extension.extension_type)
break # Выходим из цикла, если расширение найдено
# Закрытие захвата
cap.close()
```
Обратите внимание на следующие моменты в коде:
1. Мы используем `display_filter` для фильтрации только тех пакетов, которые относятся к handshake TLS. Это нужно для оптимизации.
2. Проверяем, есть ли атрибуты `tls` и `handshake` в пакете перед тем, как к ним обращаться, чтобы избежать ошибок, если пакет не содержит этих данных.
3. Проходим через все найденные расширения и ищем нужное по имени.
4. После поиска нужного расширения можем вывести его тип или любое другое требуемое значение.
Этот пример может потребовать модификации в зависимости от конкретных данных в вашем `.pcapng` файле, но задаёт общий подход к решению вашей задачи.