PacketFilterExtensionPtr

typedef  PF_FORWARD_ACTION 

(*PacketFilterExtensionPtr)(

  IN unsigned char *PacketHeader,

  IN unsigned char *Packet, 

  IN unsigned int PacketLength, 

  IN unsigned int RecvInterfaceIndex, 

  IN unsigned int SendInterfaceIndex, 

  IN IPAddr RecvLinkNextHop, 

  IN IPAddr SendLinkNextHop 

  ); 

PacketFilterExtensionPtr µ¥ÀÌÅÍ Å¸ÀÔÀº ÇÊÅÍ ÈÅ Äݹé ÇÔ¼ö¸¦ °¡¸®Å²´Ù.(point to). ÀÌ ÇÔ¼ö´Â ±×°Í¿¡ Åë°úµÈ ÆÐŶµéÀ» ó¸®ÇÏ°í ÆÐŶÀ» º¸³¾°ÍÀÎÁö µå¶øÇÒ °ÍÀÎÁö ¶Ç´Â ÆÐŶµéÀ» ´õ ¸Ö¸® ó¸®Çϱâ À§Çؼ­ IP ÇÊÅÍ µå¶óÀ̹ö¸¦ Çã¶ôÇÒ ÇÒ °ÍÀÎÁö¸¦ °áÁ¤ÇÑ´Ù.

¸Å°³º¯¼ö

PacketHeader
ÆÐŶÀÇ IP ÇìÀú¿¡ ´ëÇÑ Æ÷ÀÎÅÍ. ÇÊÅÍ ÈÅÀº IPHeader ±¸Á¶Ã¼¸¦ °¡¸®Å°´Â PacketHeader ¿¡ ´ëÇÑ Á¤º¸¸¦ cast ÇÑ´Ù.

Packet
ÇÊÅÍ ÈÅÀÌ ¼ö½ÅÇÏ´Â ÆÐŶ¿¡ ÀÖ´Â Á¤º¸¸¦ Æ÷ÇÔÇÏ´Â ¹öÆÛ¿¡ ´ëÇÑ Æ÷ÀÎÅÍ. ÀÌ ¹öÆÛ´Â PacketHeader¿¡ ÀÇÇØ¼­ °¡¸®ÄÑÁø IP Çì´õ¸¦ Æ÷ÇÔÇÏÁö ¾Ê´Â´Ù.

PacketLength
IP ÆÐŶ¿¡ ÀÖ´Â Á¤º¸ÀÇ ¹ÙÀÌÆ® Å©±â. ÀÌ Å©±â´Â IP Çì´õÀÇ Å©±â¸¦ Æ÷ÇÔÇÏÁö ¾Ê´Â´Ù.

RecvInterfaceIndex
ÆÐŶÀÌ µµÂøÇß´ø ÀÎÅÍÆäÀ̽º¿¡ ´ëÇÑ ÀÎÅØ½º ³Ñ¹ö. ÇÊÅÍ ÈÅÀº ÆÐŶÀ» ¼ö½ÅÇß´ø ƯÁ¤ÇÑ ÀÎÅÍÆäÀ̽º ¾Æ´äÅ͸¦ ½Äº°Çϱâ À§Çؼ­ ÀÌ À妽º ³Ñ¹ö¸¦ »ç¿ëÇÑ´Ù. Àü¼ÛµÈ ÆÐŶÀ» À§Çؼ­, ÀÌ ÆÄ¶ó¹ÌÅÍ´Â INVALID_PF_IF_INDEX ·Î ¼³Á¤µÇ°í RecvLinkNextHop ¿¡ ÀÖ´Â Á¤º¸´Â ¹«ÀǹÌÇÏ´Ù.

SendInterfaceIndex
ÆÐŶÀ» Àü¼ÛµÉ ÀÎÅÍÆäÀ̽º ¾Æ´äÅÍ¿¡ ´ëÇÑ À妽º ³Ñ¹ö. ¸¸¾à ÆÐŶÀÌ ¶ó¿ìÆ®µÉ ÀÎÅÍÆäÀ̽º¿¡ °üÇÑ Á¤º¸°¡ ¿ä±¸µÈ´Ù¸é, ÇÊÅÍ ÈÅÀº Simple Network Management Protocol (SNMP)À» ÅëÇØ¼­ ¶ó¿ìÆÃ Å×ÀÌºí¿¡ Äõ¸®ÇÒ ¼ö ÀÖ´Ù. ¼ö½ÅµÈ ÆÐŶµé¿¡ ´ëÇØ¼­, ÀÌ ÆÄ¶ó¹ÌÅÍ´Â INVALID_PF_IF_INDEX À» ¼³Á¤Çϰí SendLinkNextHop ¿¡ ÀÖ´Â Á¤º¸´Â ¹«ÀǹÌÇÏ´Ù.

RecvLinkNextHop
¸¸¾à ÀÎÅÍÆäÀ̽º ¾Æ´äÅͰ¡ point to multiple-point ÀÎÅÍÆäÀ̽º¶ó¸é, ÆÐŶÀ» ¼ö½ÅÇß´ø ÀÎÅÍÆäÀ̽º ¾Æ´äÅÍ¿¡ ´ëÇÑ IP ÁÖ¼Ò; ±×·¸Áö¾ÊÀ¸¸é ÀÌ ÆÄ¶ó¹ÌÅÍ´Â ZERO_PF_IP_ADDR·Î ¼³Á¤ÇÑ´Ù.

SendLinkNextHop
¸¸¾à ÀÎÅÍÆäÀ̽º ¾Æ´äÅͰ¡ point to multiple-point ÀÎÅÍÆäÀ̽º¶ó¸é, ÆÐŶÀ» Àü¼ÛÇÒ ÀÎÅÍÆäÀ̽º ¾Æ´äÅÍ¿¡ ´ëÇÑ IP ÁÖ¼Ò; ±×·¸Áö¾ÊÀ¸¸é ÀÌ ÆÄ¶ó¹ÌÅÍ´Â ZERO_PF_IP_ADDR·Î ¼³Á¤ÇÑ´Ù.

¸®Åϰª

PF_FORWARD_ACTION ¿­°Å·ÎºÎÅÍ ¾Æ·¡ÀÇ °ªµéÁßÀÇ Çϳª¸¦ ¸®ÅÏÇÑ´Ù.:

PF_FORWARD
IP ÇÊÅÍ µå¶óÀ̹ö¸¦ À§Çؼ­ IP ½ºÅÿ¡ ´ëÇÑ º¸³»´Â(forward) ÀÀ´äÀ¸·Î Áï½Ã ¸®ÅÏÇÒ °ÍÀ» ÁöÁ¤ÇÑ´Ù. ¸¸¾à ÆÐŶÀÇ ¸ñÀûÁö°¡ ´Ù¸¥ ÄÄÇ»ÅÍÀÌ°í ¶ó¿ìÆÃÀÌ °¡´ÉÇÏ´Ù¸é, IP´Â ·ÎÄà ÆÐŶ¿¡ ´ëÇÑ packet up ½ºÅÃÀ» º¸³»°Å³ª ÆÐŶÀ» ¶ó¿ìÆ®ÇÑ´Ù.(??)

PF_DROP
IP ÇÊÅÍ µå¶óÀ̹ö¸¦ À§Çؼ­ IP ½ºÅÿ¡ ´ëÇÑ µå¶ø(drop) ÀÀ´äÀ¸·Î Áï½Ã ¸®ÅÏÇÒ °ÍÀ» ÁöÁ¤ÇÑ´Ù. IP ´Â ÆÐŶÀ» µå¶øÇؾßÇÑ´Ù.

PF_PASS
ÆÐŶÀ» ó¸®Çϰí IP½ºÅÿ¡ ´ëÇÑ ÀÀ´äÀ¸·Î °á°ú¸¦ ¸®ÅÏÇϱâ À§ÇÑ IP ÇÊÅÍ µå¶óÀ̹ö¸¦ ÁöÁ¤ÇÑ´Ù. ¸¸¾à ±×°ÍÀÌ ÆÐŶÀ» ó¸®ÇÏÁö ¸»¾Æ¾ß ÇѴٴ°ÍÀÌ °áÁ¤µÇ¾ú´Ù¸é, ÇÊÅÍ ÈÅÀº Åë°ú(pass)ÀÀ´äÀ» ¸®ÅÏÇÑ´Ù.

ÁÖ¼®

¸¸¾à ÇÊÅÍ ÈÅÀÌ Åë°ú(pass) ÀÀ´äÀ» ¸®ÅÏÇÑ´Ù¸é, IP ÇÊÆ® µå¶óÀ̹ö´Â ÆÐŶÀ» ó¸®ÇÑ´Ù. ÀÌ·± °æ¿ì¿¡, À¯Àú-¸ðµå ¾îÇø®ÄÉÀ̼ÇÀº ÆÐŶ ÇÊÅ͸µ ¾îÇø®ÄÉÀÌ¼Ç ÇÁ·Î±×·¡¹Ö ÀÎÅÍÆäÀ̽º(API)(iphlpapi.lib)¸¦ ÅëÇØ¼­ ÆÐŶ ÇÊÅ͸µÀ» Á¦¾îÇÒ ¼ö ÀÖ´Ù. ÀÌ API´Â IP ÆÐŶÀ» À§ÇÑ ÀÔÃâ·Â ÇÊÅ͵éÀ» »ý¼ºÇÏ°í °ü¸®Çϱâ À§Çؼ­ »ç¿ëµÉ ¼ö ÀÖ´Ù. °¢°¢ÀÇ IP ¾Æ´äÅÍÀÎÅÍÆäÀ̽º´Â ±×°Í¿¡ ¿¬°üµÈ ÇϳªÀÌ»óÀÇ ÇÊÅ͵éÀ» °¡Áú ¼ö ÀÖ´Ù. ÇÊÅ͵éÀº ±Ù¿øÁö¿Í ¸ñÀûÁö ÁÖ¼Òµé, ÁÖ¼Ò ¸¶½ºÅ©¿Í Æ÷Æ®, ÇÁ·ÎÅäÄÝ ½Äº°ÀÚ¸¦ Æ÷ÇÔÇÒ ¼ö ÀÖ´Ù. ÀÌ API ¿¡ °üÇÑ ´õ ¸¹Àº Á¤º¸´Â Platform SDK¿¡¼­ ¾ð±ÞÇÑ´Ù.

IP ÆÐŶ µå¶óÀ̹ö´Â IPHeader ±¸Á¶Ã¼¿¡ IP Çì´õ Á¤º¸¸¦ Åë°ú½Ãų ¼ö ÀÖ´Ù. ¾Æ·¡ÀÇ ¼½¼ÇÀº IPHeader¸¦ ¼³¸íÇÑ´Ù.

IPHeader

PacketHeader ÆÄ¶ó¹ÌÅͰ¡ °¡¸®Å°´Â Á¤º¸ÀÇ ±¸Á¶Ã¼´Â ÀϹÝÀûÀ¸·Î IPHeader ±¸Á¶Ã¼·Î¼­ Á¤ÀÇ µÈ´Ù. IPHeader ´Â ÆÐŶ¿¡ °üÇÑ ¼¼ºÎ»çÇ×µéÀ» Á¦°øÇÑ´Ù. IPHeader ´Â ¾Æ·¡¿Í °°Àº Á¤ÀǵȴÙ.:

typedef struct IPHeader {

    UCHAR     iph_verlen;     // Version and length 

    UCHAR     iph_tos;        // Type of service 

    USHORT    iph_length;     // Total datagram length 

    USHORT    iph_id;         // Identification 

    USHORT    iph_offset;     // Flags, fragment offset 

    UCHAR     iph_ttl;        // Time to live 

    UCHAR     iph_protocol;   // Protocol 

    USHORT    iph_xsum;       // Header checksum 

    ULONG     iph_src;        // Source address 

    ULONG     iph_dest;       // Destination address 

} IPHeader;

ÀÌ ±¸Á¶Ã¼ÀÇ ¸â¹öµéÀº ¾Æ·¡ÀÇ Á¤º¸¸¦ Æ÷ÇÔÇÑ´Ù:

iph_verlen
ÆÐŶÀÇ ¹öÁ¯°ú ±æÀ̸¦ ÁöÁ¤ÇÑ´Ù.

iph_tos
ÆÐŶÀ» À§ÇÑ ¼­ºñ½º ŸÀÔÀ» ÁöÁ¤ÇÑ´Ù.

iph_length
ÆÐŶÀÇ ¹ÙÀÌÆ® Å©±â.

iph_id
ÆÐŶÀÇ ½Äº°À» ÁöÁ¤ÇÑ´Ù.

iph_offset
ÆÐŶ¿¡ ´ëÇÑ Ç÷¡±×¿Í ´ÜÆí ¿É¼ÇÀ» ÁöÁ¤ÇÑ´Ù.

iph_ttl
ÆÐŶÀÇ time to live (TTL)À» ÁöÁ¤ÇÑ´Ù. TLLÀº IP¸¦ »ç¿ëÇÏ´Â ³×Æ®¿öÅ© À§·Î º¸³»Á®¾ßÇÒ ÆÐŶ³»ÀÇ ¿µ¿ªÀ» ÁöÁ¤ÇÏ´Â 0~255±îÁöÀÇ °ªÀÌ´Ù. ¿µ¿ªÀº ÆÐŶÀÇ ¸ñÀûÁö°¡ ¾ó¸¶³ª ·ÎÄà ¶Ç´Â ¿ø°ÝÁöÀÇ ±â°£¿¡ Á¤ÀDZ­´Ù.(??) °¢°¢ÀÇ ¶ó¿ìÅÍ´Â TTLÀ» Çϳª¾¿ °¨¼Ò½ÃŲ´Ù. TTLÀÌ ¹Ì¸® Á¤ÇØÁø ÇÏÀ§ÀÇ ÇѰ迡 µµ´ÞÇßÀ» ¶§, ¶ó¿ìÅÍ´Â ÆÐŶÀ» ¸Ö¸® ´øÁø´Ù.(??).

iph_protocol
ÆÐŶ¿¡´ëÇÑ ÇÁ·ÎÅäÄÝÀ» ÁöÁ¤ÇÑ´Ù.

iph_xsum
ÆÐŶ¿¡ ´ëÇÑ Çì´õÃ¥¼¶À» ÁöÁ¤ÇÑ´Ù.

iph_src
ÆÐŶ¿¡ ´ëÇÑ ÄÄÇ»ÅÍÀÇ ±Ù¿øÁö IP ÁÖ¼Ò¸¦ ÁöÁ¤ÇÑ´Ù.

iph_dest
ÆÐŶ¿¡ ´ëÇÑ ÄÄÇ»ÅÍÀÇ ¸ñÀûÁö IP ÁÖ¼Ò¸¦ ÁöÁ¤ÇÑ´Ù.