2014-10-27 3 views
0

Я создаю персональное приложение для фильтрации сети с использованием C. Я уже знаю, что вы можете войти и анализировать информацию скачанного пакета, используя этот код:Как сбросить пакет до полной загрузки

tcpPacket = recvfrom(raw_socket , buffer , 65536 , 0 , &serverAddress , &serverAddressSize); 

, но это требует сначала загрузите пакет tcp. Мне нужно, чтобы фильтр выполнялся даже до его загрузки, скажем, он исследует исходный IP-адрес и на основании этого он либо принимает, либо отклоняет его.

Примечание: Да, я знаю iptables, но я не хочу использовать его, потому что хочу узнать, как это сделать, используя сырые сокеты.

ответ

0

В пакетно-ориентированной сети (например, TCP/IP) каждый пакет содержит и адресную информацию и фактическую полезную нагрузку.

Так что не имеет смысла говорить о том, что вы хотите сбросить пакет до его загрузки на основе данных в пакете.

Возможно, было бы возможно, если бы вы могли остановить реальный (аппаратный) приемник среднего пакета, но я не думаю, что какое-либо «обычное» сетевое оборудование или интерфейсы API демонстрируют такую ​​функциональность.

+0

То, что я пытаюсь достичь, - это «мини-брандмауэр». На самом деле точнее сказать «брандмауэр первого поколения». Из Википедии: «Если пакет соответствует набору фильтрующих правил фильтра пакетов, фильтр пакетов будет отбрасывать (отбрасывать) пакет или отклонять его (отбрасывать его и отправлять« ответы об ошибках »на источник)». - http://en.wikipedia.org/wiki/Firewall_%28computing%29#First_generation:_packet_filters Ergo Я уверен, что кто-то уже делал это раньше. – chelem7

+0

@ chelem7 - Обычно это делается, помещая фильтр в сетевой стек, чтобы пакет (полный) мог быть проверен перед опциональной пересылкой его в остальную часть сетевого стека. Найдите 'iptables' и' netfilter'. – DoxyLover