libnatpmp.Ŭ¶óÀ̾ðÆ® Ãø¿¡ ´ëÇÑ ÇÁ·ÎÅäÄÝÀÇ ÈÞ´ë¿ë ¹× ¿ÏÀü ȣȯ ±¸ÇöÀ» ½ÃµµÇÕ´Ï´Ù. | |
Áö±Ý ´Ù¿î·Îµå |
libnatpmp. ¼øÀ§ ¹× ¿ä¾à
±¤°í
- ƯÇã:
- BSD License
- °¡°Ý:
- FREE
- °Ô½ÃÀÚ À̸§:
- Thomas Bernard
- °Ô½ÃÀÚ À¥»çÀÌÆ®:
- http://miniupnp.free.fr/libnatpmp.html
libnatpmp. ű×
libnatpmp. ¼³¸í
Ŭ¶óÀ̾ðÆ® ÃøÀÇ ÇÁ·ÎÅäÄÝÀÇ ÈÞ´ë¿ë°ú ¿Ïº®ÇÏ°Ô È£È¯ ±¸ÇöÀ» ¸¸µé±â À§ÇØ libnatpmp´Â Ŭ¶óÀ̾ðÆ® Ãø¿¡ ´ëÇÑ ÇÁ·ÎÅäÄÝÀÇ ÈÞ´ë¿ë°ú ¿Ïº®ÇÏ°Ô È£È¯ ±¸ÇöÀ» ½ÃµµÀÌ´Ù. ±×°ÍÀº ºñ ºí·ÎÅ· ¼ÒÄÏÀ» ±â¹ÝÀ¸·ÎÇÏ°í APIÀÇ ¸ðµç È£ÃâÀº ºñµ¿±âµÈ´Ù. libnatpmp ¶óÀ̺귯¸®´Â ¸Å¿ì ½±°Ô code.NAT-PMP Áß½ÉÀÇ ¸ðµç À̺¥Æ®¿¡ ´ëÇÑ NAT-PMP Äڵ带 ÅëÇÕÇÏ´Â °ÍÀÌ´Ù´Â UPnP IGD »ç¾ç¿¡ Á÷Á¢ µ¿½ÃÀÔ´Ï´Ù. ±×°ÍÀº NAT Åë°ú¸¦ ÇÒ ¼öÀÖ´Â ¹æ¹ýÀ» Á¦°øÇÏ°íÀÖ´Ù. ±×°ÍÀº ºÀÁ긣 ÇÁ·ÎÅäÄÝ »ç¾çÀÇ ÀϺÎÀÔ´Ï´Ù. ÇöÀçÀÌ °£´ÜÇÑ ÇÁ·ÎÅäÄÝ ¶Ç´Â ÃʾÈÀ» ÀÐ¾î ¼³¸íÀ» ¾òÀ» ¼ö ÀÖ½À´Ï´Ù. ¼ø°£ ÁÖ·Î ¸Å¿ì ½±°Ô ¸ðµç C / C ++ ÇÁ·Î±×·¥¿¡¼ libnatpmp »ç¿ëÇÏ´Â °Í ´ç½ÅÀÇ programsIt ¾ÖÇà ¼ÒÇÁÆ®¿þ¾î¿Í hardware.UseÀÇ libnatpmp¿¡ ÀÇÇØ Áö¿øµË´Ï´Ù. ¸ðµç API´Â natpmp.h ÆÄÀÏ¿¡ ¼³¸íµÇ¾î ÀÖ½À´Ï´Ù. ¡¤ ¿ì¼±Àº, Çü natpmp_tÀÇ º¯¼ö°¡ ÇÒ´çµÇ¾î¾ßÇÏ°í initnatpmp ()¸¦ È£ÃâÇؾßÇÕ´Ï´Ù. ¡¤ sendpublicaddressrequest () ¶Ç´Â () sendnewportmappingrequestÀÌ È£Ãâ ÇÒ ¼ö ÀÖ½À´Ï´Ù. ¡¤ °¢ ¿äûÇÏ¿© Àü¼ÛÀÇ °æ¿ì, readnatpmpresponseorretry´Â ()¸¦ ¹Ýȯ ÇÑ´ë·Î È£ÃâÇØ¾ß NATPMP_TRYAGAIN. ¡¤ÇÏ¸é ´ç½ÅÀº ¼ÒÄÏ (Çʵå s¸¦ natpmp_t °´Ã¼)¸¦ ±â´Ù¸®´Â °æ¿ìÇÏ´Â ½Ã½ºÅÛÀ» »ç¿ë) ((¼±ÅÃ) ¶Ç´Â ¼³¹® Á¶»ç µîÀÇ È£ÃâÀ» ÀÐÀ» Áغñ°¡µÇ¾î, ´ç½ÅÀº ¾Ë°íÇϱâ À§ÇØ () getnatpmprequesttimeout »ç¿ëÇÒ ¼öÀÖ´Â ¹æ¹ýÀ» ¿À·£ ±â´Ù¸²¿¡ ¸ðµç »ç¿ëµÇ´Â ÀÚ¿øÀ» È®º¸Çϱâ À§ÇØ () ¾î·µç readnatpmpresponseorretry¸¦ È£ÃâÇϱâ Àü¿¡. ¡¤ closenatpmp () called.Sample codeError°¡ hSample codeError °Ë»ç°¡ ÀǵµÀûÀ¸·Î »ý·«µÇ¾ú½À´Ï´Ù È®ÀÎ ÇÒ ¼ö ÀÖ½À´Ï´Ù. natpmp.h ÆÄÀÏÀÇ ¸ðµç ¹Ýȯ Äڵ带 È®ÀÎÇϽñ⠹ٶø´Ï´Ù. °£´ÜÇÑ sampleThisÀº ¸Å¿ì °£´Ü »ùÇà ´ÜÁö Àç ÁöÁ¤À» ¿äûÇÏ°í ÀÛ¾÷ÀÌ ¿Ï·áµÇ¸é ¹ÝȯÇÕ´Ï´Ù. º¸ÀÌµå ¸®µð·º¼Ç (uint16_tÀÇ privateport, uint16_tÀÇ publicport) {INT ¿¬±¸; natpmp_t natpmp; natpmpresp_t ÀÀ´ä; initnatpmp (natpmp); sendnewportmappingrequest (natpmp, NATPMP_PROTOCOL_TCP, privateport, publicport, 3600); {FD_SET FDS¸¦ ÇÒ; timeval Çü ŸÀÓ ¾Æ¿ôÀ» ±¸Á¶Ã¼; FD_ZERO (FDS); FD_SET (natpmp.s, FDS); getnatpmprequesttimeout (natpmp, ÃÊ°ú); ¼±Åà (FD_SETSIZE, FDS, NULL, NULL, ½Ã°£ ÃÊ°ú); R = readnatpmpresponseorretry (natpmp ÀÀ´ä); } ¹Ý¸é (R == NATPMP_TRYAGAIN); ÀÇ printf ( "% °ø¿ë Æ÷Æ®¿¡ ¸ÅÇÎ µÈ ÈÄ localport % ÈÄ liftime %ÀÇ Ãë¼Ò"response.newportmapping.mappedpublicport, response.newportmapping.privateport, response.newportmapping.lifetime); closenatpmp (natpmp); } µî °íÀÇ·Î »ý·«µÈ´Ù. ¾ÆÁÖ °£´ÜÇÑ »ùÇÃÀÌ ´ÜÁö Àç ÁöÁ¤À» ¿äûÇÏ°í ÀÛ¾÷ÀÌ ¿Ï·áµÇ¸é ¹Ýȯ natpmp.h file.simpleÀÇ sampleThisÀÇ ¸ðµç ¹Ýȯ Äڵ带 È®ÀÎÇϽñ⠹ٶø´Ï´Ù. º¸ÀÌµå ¸®µð·º¼Ç (uint16_tÀÇ privateport, uint16_tÀÇ publicport) {INT ¿¬±¸; natpmp_t natpmp; natpmpresp_t ÀÀ´ä; initnatpmp (natpmp); sendnewportmappingrequest (natpmp, NATPMP_PROTOCOL_TCP, privateport, publicport, 3600); {FD_SET FDS¸¦ ÇÒ; timeval Çü ŸÀÓ ¾Æ¿ôÀ» ±¸Á¶Ã¼; FD_ZERO (FDS); FD_SET (natpmp.s, FDS); getnatpmprequesttimeout (natpmp, ÃÊ°ú); ¼±Åà (FD_SETSIZE, FDS, NULL, NULL, ½Ã°£ ÃÊ°ú); R = readnatpmpresponseorretry (natpmp ÀÀ´ä); } ¹Ý¸é (R == NATPMP_TRYAGAIN); ÀÇ printf ( "% °ø¿ë Æ÷Æ®¿¡ ¸ÅÇÎ µÈ ÈÄ localport % ÈÄ liftime %ÀÇ Ãë¼Ò"response.newportmapping.mappedpublicport, response.newportmapping.privateport, response.newportmapping.lifetime); closenatpmp (natpmp); } ´õ º¹ÀâÇÑ sampleWe´Â P2P ¼ÒÇÁÆ®¿þ¾îÀÇ ÃʱâÈ ´Ü°è¸¦ »ó»óÇÒ ¼ö ÀÖ¾ú´Ù. ÀÌ ´Ü°è¿¡¼, ¼ÒÇÁÆ®¿þ¾î´Â °ø¿ë IP ÁÖ¼Ò¸¦ È®ÀÎÇÏ°í Æ÷Æ® ¸ÅÇÎÀ» Ãß°¡ÇÏ·Á°íÇÕ´Ï´Ù. ÇÁ·Î¼¼½ºÀÇ ³¡¿¡¼, natpmpstate´Â Sdone ¶Ç´Â SerrorÀÌ µÉ °ÍÀÔ´Ï´Ù. {natpmp_t natpmp; natpmpresp_t ÀÀ´ä; ENUM {Sinit = 0 Ssendpub, Srecvpub, Ssendmap, Srecvmap, Sdone, Serror = 1000} = natpmpstate Sinit; INT (R); ¸¸¾à (initnatpmp (natpmp)
libnatpmp. °ü·Ã ¼ÒÇÁÆ®¿þ¾î