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 ÁÖ¼Ò¸¦ ÁöÁ¤ÇÑ´Ù.
|