Прежде всего, я пытаюсь получить адрес источника и порт назначения из полезной нагрузки полезной нагрузки очереди Netfilter (полезная нагрузка извлекается с помощью функции nfq_get_payload). Следующий вопрос задает то же самое и получает правильный ответ:
Как извлечь номер порта источника и получателя из пакета в очереди iptables
К сожалению, нет объяснения, почему добавление 20 и 22 к адресу приводит вас в нужное место для чтения информации. Я предполагаю, что это из-за структуры данных (очевидно), но если есть определенная структура, то что это?
В документации явно не объясняется, как форматируются данные, только то, что «тип данных, извлекаемых этой функцией, будет зависеть от режима, установленного с помощью функции nfq_set_mode()», но тогда документы для set_mode ничего не упоминают о данных типа и источник ничего сразу не раскрывает.
Я чувствую, что это должно быть что-то очень важное для общих структур сетевого программирования, которые я упускаю или не понимаю.
Примечания: функция nfq_get_payload: http://www.netfilter.org/projects/libnetfilter_queue/doxygen/group__Parsing.html#gaf79628558c94630e25dbfcbde09f2933