Я использую pcap для захвата TCP-пакетов, для которых я хотел бы проанализировать полезную нагрузку. Моя стратегия заключается в следующем:Как разобрать полезную нагрузку TCP-пакета
- Получить заголовок локальных сетей и проверить, если он имеет тип
ETHERTYPE_IP
(IP пакетов) - Проверьте, если пакет IP имеет протокол
IPPROTO_TCP
(TCP пакетов) Проверка на размер полезной нагрузки > 0
(size = ntohs(ip_header->total_length - ip->header_length*4 - sizeof(struct tcp_header))
.синтаксического анализа полезной нагрузки (захватить хоста URL)
я не начал разбор полезной нагрузки еще потому, что я получаю расхождения. Ниже приведена распечатка полезной нагрузки из 10 захваченных пакетов TCP, используя фильтр "host = www.google.com"
.
номер пакета: 3: TCP Packet: Порт источника: 80 Dest Port: 58723 Нет данных в пакете
номер пакета: 4: TCP Packet: Порт источника: 58723 Dest Port: 80 нет данных в пакете
номер пакета: 5: TCP Packet: Порт источника: 58723 Dest Port: 80 Payload: GET/HTTP/1.1 Ведущий: www.goo gle.com User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_5; en-us) AppleWebKit/533.19.4 (KHTML, например, Gecko) Версия/5.0.3 Safari/533.19. Принять: application/xml, application/xhtml + xml, text/html; q = 0.9, text/plain; q = 0,8, image/png, /; q = 0,5 Принимаем-Язык: en-us Принимаем-кодировать: gzip, deflate Cookie: THICNT = 25; SID = DQAAAKIAAAB2ktMrEftADifGm05WkZmlHQsiy1Z2v- соединения: держать-жив
номер пакета: 6: TCP Packet: Порт источника: 80 Dest Port: 58723 Нет данных в пакете
номер пакета: 7: TCP Packet : Порт источника: 80 Dest Port: 58723 Полезная нагрузка: \ 272 ن u \ 243 \ 255 \ 375 \ 375} \ 336H \ 221 \ 227 \ 206 \ 312 ~ \ 322 \ 317N \ 236 \ 255A \ 343 # \ 226 \ 370 ֤ \ 245 [\ 327` \ 306 ը nE \ 263 \ 204 \ 313 \ 356 \ 3268) p \ 344 \ 301_Y \ 255 \ 267 \ 240 \ 222x \ 36 444441 номер 4620935846510408888 пакет: 8: TCP Packet: Порт источника: 58723 Dest Port: 80 Нет данных в пакете
номер пакета: 9: TCP Packet: Порт источника: 80 Dest Port: 58723 Полезная нагрузка: HTTP/1.1 200 OK Дата: Пн, 29 Ноя 2010 10:11:36 GMT Истекает: -1 Cache-Control: private, max-age = 0 Content-Type: text/html; charset = UTF-8 Контент-кодирование: gzip Сервер: gws Контент-длина: 8806 X-XSS-Protection: 1; mode = block \ 213
Почему существует несоответствие в полезной нагрузке и в портах? В идеале я хотел бы только анализировать пакеты, такие как пакет 5. Как игнорировать пакеты вроде 7 и 9?
Неясно, какую часть пакета вы хотите фильтровать. Я осмеливаюсь, что это источник или порт назначения. – sashang
Я хотел бы захватить URL-адрес хоста. Я обнаружил, что, отфильтровывая пакеты с портом назначения 80, мне удается «отсеять» нежелательные, но что происходит, когда кто-то обращается к URL-адресу на нестандартном порту? – David
Например, ssh и ssl шифруют данные. Эти пакеты будут похожи на те, которые вы не хотите. FWIW может быть такой объем трафика. Используйте регулярное выражение (regex.h) для выбора пакетов - regcomp, regexec и т. Д. Ищите пакеты с блоками читаемых символов. –