IO Ninjaã¯ããšããšãªãŒã«ã€ã³ã¯ã³ãŠãŒãã£ãªãã£ãšããŠèããããŠãããããã±ãŒãžã«ã¯ããŸããŸãªã¢ãŒãã§ããŸããŸãªè»äž¡ãæäœããããã®å€æ°ã®çµã¿èŸŒã¿ãã©ã°ã€ã³ãå«ãŸããŠããŸãã ãã ãããã©ã°ã€ã³ã®ãªã¹ããšãã®æ©èœã®ãã©ã€ãªã¹ãã®ä»£ããã«ãç§ãã¡ã®äŒç€Ÿãå®éã«çŽé¢ãã人çã®ã¿ã¹ã¯ã®å°ããªãµã³ãã«ãå®èšŒããããšã決ããŸããããŸããããç¥ãããŠãã端æ«ãšã¢ãã¿ãŒã¯ãIO NinjaãããããŸã察åŠããŸããïŒãããŠããŸã£ãã察åŠããŸããïŒã
ã·ãªã¢ã«ãžã®TCP転é
Unixã©ã€ã¯ã·ã¹ãã ã®ãŠãŒã¶ãŒã¯ãããããã°ã©ã ã®åºåãå¥ã®ããã°ã©ã ã®å ¥åã«ãªãã€ã¬ã¯ãã§ããããšãããç¥ã£ãŠããŸãã IO Ninjaã®ã»ãã·ã§ã³ãªã³ã¯ã¯ãåæ§ã®æ©èœãæäŸããŸãã éãã¯ãUnixãã€ãã®å Žåã®ããã«ãåæ¹åã®ããŒã¿ã«ã¹ã±ãŒãã§ã¯ãªãã2ã€ã®ã»ãã·ã§ã³ã®æ¥ç¶ã«ãããäžæ¹ã®åºåãä»æ¹ã®å ¥åã«ãççž®ãããéãåæ§ã§ãïŒãã®å Žåããã¹ãŠã®éä¿¡ããŒã¿ããã°ã«èšé²ãããŸãïŒã ããã«ãããIO Ninjaããªãã€ã¬ã¯ãããã³/ãŸãã¯ãªãã¹ã³ã®ãŠãããŒãµã«ä»²ä»ãšããŠäœ¿çšããããšãå¯èœã«ãªããŸãã
ããã€ã¹ãã·ãªã¢ã«ã€ã³ã¿ãŒãã§ã€ã¹ïŒã·ãªã¢ã«ïŒãä»ããŠã³ã³ãã¥ãŒã¿ãŒã«æ¥ç¶ãããŠãããšããŸãã IO Ninjaãéããã·ãªã¢ã«ã»ãã·ã§ã³ãéå§ããŸãã ã·ãªã¢ã«ããŒããéããŠèšå®ããŸãïŒãããããããã€ã¹ã掻çºã§ããããšã確èªããããã«ãããã€ãã®ãã¹ãã³ãã³ããããã€ã¹ã«éä¿¡ããŸãïŒã
次ã«ãTCPãªã¹ããŒã»ãã·ã§ã³ãéå§ãããªãã¹ã³ããã€ã³ã¿ãŒãã§ã€ã¹ãšTCPããŒããéžæããŸãã èšå®ãã€ã¢ãã°ãä»ããŠã2ã€ã®ã»ãã·ã§ã³SerialãšTCP Listenerãæ¥ç¶ããŸãã ããã§ãä»ã®ã³ã³ãã¥ãŒã¿ãŒããTCPçµç±ã§ã·ãªã¢ã«ããã€ã¹ã«æ¥ç¶ã§ããŸãïŒ
UDPãããŒããã£ã¹ãã䜿çšããŠããŒã«ã«ã»ã°ã¡ã³ãã®ããã€ã¹ãæ€çŽ¢ãã
ãããã¯ãŒã¯äžã®ããã€ã¹ãèªåæ€åºããäžè¬çãªæ¹æ³ã¯ããšã³ãŒèŠæ±ãéä¿¡ããŠããå¿çãã±ãããåéããããšã«ããUDPããããŒããã£ã¹ãããããšã§ããããã¯ç¹ã«ãåœç€Ÿã補é ãããã¹ãŠã®çµã¿èŸŒã¿ã¢ãžã¥ãŒã«ã®èªåæ€åºã§æ©èœããŸãã IO Ninjaã¯ã1察å€éä¿¡ã®ãããŒããã£ã¹ãUDPã¿ãŒããã«ãšããŠäœ¿çšã§ããŸãã
UDPãœã±ãããéãã255.255.255.255ïŒãŸãã¯ã¢ãã¬ã¹ãšããŠãµãããããããŒããã£ã¹ãã¿ã€ã192.168.1.255ïŒãç»é²ãããšã³ãŒèŠæ±ãéä¿¡ããŸãã ãã®çµæãããŒã«ã«ã»ã°ã¡ã³ãã®ãã¹ãŠã®ããã€ã¹ã®ãªã¹ãã衚瀺ãããŸãã ããã«ãå¿ èŠã«å¿ããŠãç¹å®ã®ããã€ã¹ãšã®éä¿¡ãç¶ç¶ã§ããŸãã
ã¡ãªã¿ã«ãã³ã³ãã¹ã§ãã¿ã³ã«æ³šæããŠãã ããã UDPïŒç¹ã«ãµãŒããŒåŽïŒã§äœæ¥ããå Žåããã±ããã®éä¿¡å ã®ã¢ãã¬ã¹ãèŠããŠãããã«æ£ç¢ºã«å¿çããå¿ èŠãããããšããããããŸããæ¥ç¶ã¯ãããŸããïŒ ååãšããŠããã°ããã¢ãã¬ã¹ãã³ããŒããŠããªã¢ãŒãã¢ãã¬ã¹ãå ¥åãã£ãŒã«ãã«è²Œãä»ããããšã劚ãããã®ã¯ãããŸããã ãããããªãããªãã¯æã§è»ã«äœã眮ãããšãã§ããŸããïŒ ã³ã³ãã¹ãæŒããšãå¿ èŠãªèªååãè¡ãããŸã-UDPã»ãã·ã§ã³ã¯ãªã¢ãŒãã¢ãã¬ã¹ãèªåçã«åæ§æããŸãã
å ¥åã¹ããªãŒã ã®äžéšããã¡ã€ã«ã«ä¿åãã
ãããã°äžã«ãåä¿¡ããããŒã¿ããã¡ã€ã«ã«ä¿åããå¿ èŠãããå ŽåããããŸãã ããšãã°ããã®ã»ãã·ã§ã³ãŸãã¯ä»ã®ã»ãã·ã§ã³ã§å€æŽããã«éä¿¡ããå¿ èŠããããããã¯ã§ããå¯èœæ§ããããŸãããªã¢ãŒããã¹ãã«ãã£ãŠéä¿¡ããããã¡ã€ã«ã§ããå¯èœæ§ããããŸãã
æšæºç«¯æ«ã¯ããã®ããªãåçŽãªã¿ã¹ã¯ã§åæ¢ããããšããããããŸãããããã¯æ¬¡ã®ç¹ã«ãããã®ã§ãã
- ããŒã¿ã¯ãã€ããªã§ãå°å·ã§ããªãæåãå«ãããšãã§ããŸãã
- ããŒã¿ã¯è€æ°ã®ãã±ããã«åæ£ã§ããŸãã
- ååãšããŠãå ¥åã¹ããªãŒã å šäœã§ã¯ãªããå³å¯ã«å®çŸ©ããããããã¯ãå¿ èŠã§ãïŒã€ãŸããåã«ã¹ããªãŒã ããã¡ã€ã«ã«ãªãã€ã¬ã¯ãããã ãã§ã¯ãåé¡ã¯å®å šã«ã¯è§£æ±ºãããŸããïŒã
IO Ninjaã¯ãå ¥ã£ãŠããããã±ãŒãžãæ¥çããã16é²ã·ãŒãã圢åŒã®ãã°ã®ååšãšæ¯èŒããŠæå©ã§ããããã«ãããå¿ èŠãªããšãæ£ç¢ºã«éæã§ããŸãã
ç®çã®ããŒã¿ãããã¯ãéžæãïŒå¿ èŠã«å¿ããŠãã¹ããŒã¿ã¹ããŒãèŠãŠãã ãã-éžæãããããã¯ã®ãªãã»ãããšé·ãã衚瀺ãããŸãïŒããã¡ã€ã«ã«ä¿åããŠãã䜿çšããŸãã ããšãã°ãå¥ã®ã»ãã·ã§ã³ã«è»¢éããŸãã
TCPãªã¹ããŒã䜿çšããTCPæ¥ç¶ã®åä¿¡
äžèšã§ãTCPãªã¹ããŒããªãã€ã¬ã¯ããæŽçããŠãTCPçµç±ã§ã·ãªã¢ã«ããã€ã¹ã«æ¥ç¶ã§ããããã«ããæ¹æ³ã説æããŸããã ãã ããTCPãªã¹ããŒãã©ã°ã€ã³ã®æåã®ç®çã¯ããã§ã¯ãªãããµãŒããŒåŽã®TCP端æ«ãšããŠïŒç¹ã«ãTCPæ¥ç¶ã®ã¯ã©ã€ã¢ã³ãåŽããããã°ããããïŒã§ãã
æ°ããTCPãªã¹ããŒã»ãã·ã§ã³ãäœæããã€ã³ã¿ãŒãã§ã€ã¹ãšããŒããéžæããŠããµãŒããŒãèµ·åããŸãã ã¯ã©ã€ã¢ã³ããã端æ«ã䜿çšããŠçä¿¡æ¥ç¶ãåä¿¡ããåŸãéåžžã©ããäœæ¥ã§ããŸãã
TCPãªã¹ããŒã«ã¯ãæ¥ç¶ãæ¢ã«äœ¿çšå¯èœãªå Žåã«æ°ããçä¿¡æ¥ç¶ãåãå ¥ãããã©ãããéžæã§ããããšã«æ³šæããŠãã ããã ãã®ãªãã·ã§ã³ã¯ãã¯ã©ã€ã¢ã³ããåãã¢ãã¬ã¹ãžã®å€ãã®ã»ã«ã³ããªæ¥ç¶ã確ç«ããç¶æ³ã§éåžžã«åœ¹ç«ã¡ãŸãïŒããšãã°ãå€ãã®Webãã©ãŠã¶ãŒãªã©ïŒ
TCPãããã·ã䜿çšããTCPæ¥ç¶ã®ãªãã¹ã³
IO Ninjaã«ã¯ããããã¯ãŒã¯æ¥ç¶ããªãã¹ã³ããããã®PCapããŒã¹ã®ãããã¯ãŒã¯ã¹ããã¡ãŒã§ããNetwork Snifferãã©ã°ã€ã³ãå«ãŸããŠããŸãã ãã ããå Žåã«ãã£ãŠã¯ãå¥ã®çµã¿èŸŒã¿ãã©ã°ã€ã³ãã€ãŸãTCPãããã·ã䜿çšããæ¹ãã¯ããã«äŸ¿å©ã§ãã
TCPãããã·ã¯TCPæ¥ç¶ãšTCPãªã¹ããŒã®çµã¿åããã§ãããTCPæ¥ç¶ã®ä»²ä»è ãç·šæã§ããŸãã ãã®ã¢ãããŒãã®å©äŸ¿æ§ã¯ãããŒã¿ã¹ããªãŒã ã®ã¯ãªãŒã³ãªãã°ããªã¢ã«ã¿ã€ã ã§å³åº§ã«æäŸãããšããäºå®ã«ãããŸãïŒããŒã¿ã¹ããªãŒã ãåŸã§åŸ©å ããå¿ èŠããããã±ãã圢åŒã®ãã°ã®ä»£ããã«ïŒã ããã«ããã®ã¢ãã«ã¯ãã¹ããã¡ãŒã§ã®ãªã¹ãã³ã°ãå°é£ãªå Žåã«ãæ©èœããŸãïŒãããã¯ãŒã¯ã¹ã€ãããWi-Fiã«ãŒããªã©ã®ç¹å®ã®ã¢ãã«ã§ïŒ
TCPãããã·ã»ãã·ã§ã³ãäœæãããµãŒããŒåŽãšã¯ã©ã€ã¢ã³ãåŽãæ§æããŠããããã·ãµãŒããŒãå®è¡ããŸãã ãã®ãµãŒããŒãžã®æ¥ç¶ã¯ãããã·ã®ã¯ã©ã€ã¢ã³ãåŽããã»ã«ã³ããªæ¥ç¶ãçæããŸãããã¯ã©ã€ã¢ã³ãåŽã§åä¿¡ãããã¹ãŠã®ããŒã¿ã¯ãµãŒããŒåŽã«è»¢éããããã®éãåæ§ã§ãã ãã®æå³ã§ãTCPãããã·ã¯ã»ãã·ã§ã³ãã€ã³ãã£ã³ã°ã«äŒŒãŠããŸãããTCPåãã«ç¹å¥ã«åŒ·åãããŠããããããã䟿å©ã§ãã
Windowsååä»ããã€ãã®ãããã°
IO Ninjaã¯ãWindowsã®IPCïŒããã»ã¹ééä¿¡ïŒãžã®ããªãäžè¬çãªã¢ãããŒãïŒååä»ããã€ãïŒããããã°ããããã®ããŒã«ãšããŠäœ¿çšã§ããŸãã ç¹ã«ãWindowsãã©ã€ããŒã®äžéšã¯ãé¢é£ãããµãŒãã¹ãã¢ããªã±ãŒã·ã§ã³ãšéä¿¡ããŸãã
ã¢ããªã±ãŒã·ã§ã³ã®ãµãŒããŒåŽïŒConnectNamedPipeãåŒã³åºãããåŽïŒããšãã¥ã¬ãŒãããã«ã¯ãååä»ããã€ããªã¹ããŒãå®è¡ããŸãã ãã®ãã©ã°ã€ã³ã䜿çšãããšãã¯ã©ã€ã¢ã³ãã¢ããªã±ãŒã·ã§ã³/ãµãŒãã¹ããã®çä¿¡ååä»ããã€ãæ¥ç¶ãåãå ¥ããããšãã§ããŸãã
æ¥ç¶ã確ç«ããåŸãã¯ã©ã€ã¢ã³ããšéä¿¡ããåä¿¡ããèŠæ±ã®ãã°ãåæããŠãå¿çããã±ãŒãžïŒããã±ãŒãžãã«ããŒãªã©ã§äœæïŒãéä¿¡ããããšãã§ããŸãã
ã¯ã©ã€ã¢ã³ãåŽïŒCreateFileãåŒã³åºãããåŽïŒããšãã¥ã¬ãŒãããã«ã¯ãGeneric Fileãã©ã°ã€ã³ã䜿çšãããŸãã
ååä»ããã€ãïŒãŸãã¯* nixã®FIFOïŒã®ãããã°ã«å ããŠããã®ãã©ã°ã€ã³ã¯ãéæšæºã®ããã€ã¹ãã©ã€ããŒã®èªã¿åãããã³æžã蟌ã¿ã«ã䜿çšã§ããŸãã
ååä»ããã€ãããªãã¹ã³ããåé¡ã«ã€ããŠç°¡åã«è§ŠããŸãã IPCã«ãã€ãã䜿çšããã¢ããªã±ãŒã·ã§ã³ãŸãã¯ãã©ã€ããŒããããšããŸãã ã¯ã©ã€ã¢ã³ãåŽã§ååä»ããã€ãã¢ãã¬ã¹ãäœããã®æ¹æ³ã§æ§æã§ããå Žåã¯ãäžéïŒTCPãããã·ãšåæ§ïŒã䜿çšããŠãã€ãæ¥ç¶ããªãã¹ã³ã§ããŸãã
ã©ã®ãããæ£ç¢ºã«ïŒ
ãããã°å¯Ÿè±¡ã®ã·ã¹ãã ã«ã\\ã\ Pipe \ debuggee_pipe_serverãžã®ãã€ãæ¥ç¶ã確ç«ãããŸãã \\ã\ Pipe \ my_pipe_proxyãªã©ãæªäœ¿çšã®ãã€ãåãéžæããŸãã ãã®\\ã\ Pipe \ my_pipe_proxyã§ãããã°å¯Ÿè±¡ã·ã¹ãã ã®ã¯ã©ã€ã¢ã³ãåŽãæ§æããŸãã IO Ninjaã§ãPipe ListenerãšGeneric Fileã®ãã¢ãéãããªã³ã¯ããŸãã Pipe Listenerã§ã\\ã\ Pipe \ my_pipe_proxyãšå
¥åããŠãListenãã¯ãªãã¯ããŸãã æ±çšãã¡ã€ã«ã«ã\\ã\ Pipe \ debuggee_pipe_serverãšå
¥åããŠã[éã]ãã¯ãªãã¯ããŸãã ã¡ãã£ãšãŒã¿ãŒã®æºåãã§ããŸããã
IO Ninjaã®ä»åŸã®ããŒãžã§ã³ã§ã¯ãäžéè ãç·šæããããšãªããååä»ããã€ãã®å®å šãªãªãã¹ã³ãè¿œå ããŸãïŒæåã®è¿äŒŒãšããŠããããããŠãŒã¶ãŒã¢ãŒãAPIããã¯ã䜿çšããåŸã§ãã¡ã€ã«ã·ã¹ãã ãã£ã«ã¿ãŒã䜿çšããŸãïŒã
ãã¹ãã®ããã«ããŒããã¬ãŒã ãéä¿¡ãã
ãå£ããããŸãã¯ç¹å¥ã«åœ¢æãããã€ãŒãµããããã¬ãŒã ãéä¿¡ããå¿ èŠæ§ã¯ããã»ã©äžè¬çã§ã¯ãªãããšããŸããã¯ã§ããå¯èœæ§ãé«ãããã§ãã ããã«ããããããããã®æ©èœã¯éåžžã«å€ãã®å®éã®ã·ããªãªã§éèŠããããŸãã ããšãã°ãç§ãã¡ã®å®è·µã§ã¯ãããã¯ãåœç€Ÿã補é ããçµã¿èŸŒã¿ã¢ãžã¥ãŒã«ã®TCP / IPã¹ã¿ãã¯ã®å®è£ ããããã°ãããšãã«å¿ èŠã§ããã å¥ã®çŸå®çãªã¢ããªã±ãŒã·ã§ã³é åã¯ããããã¯ãŒã¯ã»ãã¥ãªãã£ã®å°é家ããã¡ã€ã¢ãŠã©ãŒã«éçºè ãªã©ãçŽé¢ããã¿ã¹ã¯ã§ãã
ãããã¯ãŒã¯ã¹ããã¡ãŒã»ãã·ã§ã³ãéããã€ã³ã¿ãŒãã§ã€ã¹ãšãã£ããã£ãã£ã«ã¿ãŒãéžæããŠããã£ããã£ãéå§ããŸãã ããã±ãŒãžãã«ããŒã§ã¯ãå¿ èŠãªãã¬ãŒã ãæºåããŸããããšãã°ãTCP / IPãã±ãããã³ãã¬ãŒãã®çµã¿èŸŒã¿ã©ã€ãã©ãªã䜿çšãããããã£ããã£ãããã¬ãŒã ã®äžéšã16é²ãšãã£ã¿ãŒã«ã³ããŒããŠå¿ èŠãªãã£ãŒã«ããä¿®æ£ãããã§ããŸãã
[éä¿¡]ãã¯ãªãã¯ãããšãææ ã蟌ããŠã³ã³ãã€ã«ãããã¬ãŒã ãåºçºããæŠéããã·ã§ã³ãå®äºããŸãã
ãããã«
IO Ninjaã䜿çšããããã®ã·ããªãªã®ãã®ãªã¹ãã¯ãå®å šã§ã¯ãããŸããããååãšããŠãå šäœåã瀺ãã®ã«ååã§ãã ããã«ã圌ã¯çµ¶å¯Ÿã«æ£çŽã§ã-äžèšã®ãã¹ãŠã®æ©èœã¯ã補åã®éçºäžã«çããå®çšçãªããŒãºããçãŸããŸããã
èšäºã®æ¬¡ã®éšåã§ã¯ãæãèå³æ·±ãéšåã«é²ã¿ãŸã-IO Ninjaã®ããã°ã©ãããªãã£ãšãããéãæ°æ©èœã
èšäºã®æ¬¡ã®éšå
ããŒã3ïŒãçå®çªé»è©±ãã®äœæhttp://habrahabr.ru/company/tibbo/blog/256803/