´ÙÀ½ ÀÌÀü Â÷·Ê

15. ºÎ·Ï E ³×Æ®¿öÅ© °ü¸® ¿¹Á¦

ÀÌ È­ÀÏÀ» ¾òÀ¸·Á¸é À¥ºê¶ó¿ìÀú¿¡¼­ network.lib¶õ À̸§ÀÇ 'ÅؽºÆ®(Text)' ÇüÅ·ΠÀúÀåÇ϶ó.

PHP: network adminstrator's best friend from http://www.phpWizard.net

À¥°³¹ßÀڷμ­ ¾Æ¸¶ ping, whois, nslookup µîµîÀÇ À¯¿ëÇÑ ÅøÀ» »ç¿ëÇÒ°ÍÀÌ´Ù. ±×·¯³ª °í°´ÀÇ »ç¹«½Ç¿¡¼­ ±× ÅøÁß Çϳª¸¦ »ç¿ëÇؾߵǴµ¥ telnetÀ» »ç¿ëÇÒ¼ö ¾ø´Ù¸é ¾î¶»°ÔÇÒ°ÍÀΰ¡? PHP ¸Å´º¾óÀÇ '³×Æ®¿öÅ©'¿¡¼­ functionÀ» ã¾Æº¸´Â °ÍÀÌ ´ë¾ÈÀÌ´Ù.

¼ÒÄÏ ÀÛµ¿ :

°¡Àå Áß¿äÇÑ ÇÔ¼ö´Â fsockopen()ÀÌ´Ù. ÀÌÇÔ¼ö¸¦ »ç¿ëÇÏ¸é ¼­¹öÀÇ ¿­·ÁÁø ¾î¶² Æ÷Æ®·Îµµ Á¢¼ÓÇÒ¼ö ÀÖ°í ¼ÒÄÏÀÇ ¿¬°áÀ» ¼³Á¤ÇÒ¼ö ÀÖ´Ù. ÇÔ¼öÀÇ ¹®¹ýÀº ´ÙÀ½°ú °°´Ù :


        int fsockopen(string hostname, int port, int [errno], string [errstr]);

¾ÕÀÇ 2°³ÀÇ º¯¼ö´Â ½±°Ô ¾Ë¼ö ÀÖ°í, ´ÙÀ½ÀÇ 2°³ÀÇ º¯¼ö´Â ¿É¼ÇÀÌ°í, ¿¡·¯¸¦ ó¸®Çϱâ À§ÇØ ¾²ÀδÙ. "errno"°ú "errstr"Àº ÂüÁ¶¸¦ ÅëÇؼ­ ÀÌ·ç¾îÁ®¾ß ÇÑ´Ù. "ÂüÁ¶¸¦ ÅëÇØ ÀÌ·ç¾îÁø´Ù"´Â ¸»ÀÇ Àǹ̴ ¿ø·¡ÀÇ º¯¼ö°¡ º¯ÇÑ´Ù´Â ¸»ÀÌ´Ù. º¸Åë, ÇÔ¼ö°¡ ½ÇÇàµÇ´õ¶óµµ º¯¼öÀÇ ³»¿ëÀº º¯ÇÏÁö ¾Ê´Â´Ù.

±×·¡¼­, À¥¼­¹ö¿¡ ¿¬°áÇϱâ À§ÇØ ÀÌÇÔ¼ö¸¦ »ç¿ëÇÏ°í Çì´õ¸¦ ÇÁ¸°Æ®Ç϶ó :


function get_headers($host, $path = "/")
{
        $fp = fsockopen ("$host", 80, &$errnr, &$errstr) or die("$errno: $errstr");
        fputs($fp,"GET $path HTTP/1.0\n\n");
        while (!$end)
        {
                $line = fgets($fp, 2048);
                if (trim($line) == "")
                        $end = true;
                else
                        echo $line;
        }
        fclose($fp);
}

ÀÌ ¿¹Á¦¿¡¼­´Â fsockopen()À» È£ÃâÇؼ­ ¾òÀº ÆÄÀÏÆ÷ÀÎÅÍ¿Í ÆÄÀÏ󸮿¡ °üÇÑÀÀ¿ëÀ» ¾Ë¾Æº¼°ÍÀÌ´Ù.(fred, fwrite µîµî) HTTP/1.0 Ŭ¶óÀ̾ðÆ®¿¡¼­¸¸ ±¸ÇöµÈ´Ù´Â°ÍÀ» ¸í½ÉÇ϶ó. - name-based °¡»óÈ£½ºÆ®¿¡¼­´Â µ¿ÀÛÇÏÁö ¾Ê´Â´Ù.

Áö½Ã:

ÀϹÝÀûÀ¸·Î ´Ù¸¥ Æ÷Æ®·Î ¿¬°á ÇÒ¼ö ÀÖ´Ù. PHP·Î ÀÛÀº ÇΰŠŬ¶óÀ̾ðÆ®¸¦ ¸¸µç°ÍÀº ½¬°Ô ÇÒ¼ö ÀÖ´Ù. ÇΰŠµ¥¸ó¿¡ Äõ¸®(Áú¹®)Çϱâ À§ÇØ ¾Æ·¡¿¡ ÀÖ´Â ¿¹Á¦¸¦ ¼öÁ¤Ç϶ó.


function finger ($host, $user)
{
        $fp = fsockopen($host, 79, &$errno, &$errstr) or die("$errno: $errstr");
        fputs($fp, "$user\n");
        while (!feof($fp))
                echo fgets($fp, 128);
        fclose($fp);
}

Whois: ÈÄÀ̽º(whois) ¼­¹ö¿¡ Áú¹®Çϴ°͵µ °°Àº °³³äÀÌ´Ù:


// domain is like "phpwizard.net"
function whois($domain, $server="whois.internic.net")
{
        $fp = fsockopen ($server, 43, &$errnr, &$errstr) or die("$errno: $errstr");
        fputs($fp, "$domain\n");
        while (!feof($fp))
                echo fgets($fp, 2048);
        fclose($fp);
}

ºí·°Å·, ³Íºí·ÏÅ· Á¦¾î : ±×·¯³ª ÀÌÇÔ¼ö¸¦ »ç¿ëÇϴµ¥ ¹®Á¦°¡ ÀÖ´Ù. ´ÙÀ½°ú °°À»¶§¸¸ ÀßÀÛµ¿ÇÑ´Ù.

  1. È£Ãâ½Ã°£ÀÌ ÀÛÀº ¿¬°áÀ϶§¿Í
  2. ¿¬°áÇÏ°í ÀÖ´Â ¼­¹ö°¡ »ì¾ÆÀÖ°í ÀÛµ¿ÇÒ¶§. ±×·¸Áö ¾ÊÀ¸¸é, ´ç½ÅÀÇ ½ºÅ©¸³Æ®´Â Á¾·áµÉ¶§±îÁö ÀÛµ¿ÇÑ´Ù. ±×·¸°Ô µÇ´Â ÀÌÀ¯´Â ¼ÒÄÏ¿¬°áÀº ºí·°Å·µÇ¸ç Á¾·á°¡ µÇÁö¾Ê±â ¶§¹®ÀÌ´Ù. set_socket_blocking()À̶õ ÇÔ¼ö´Â ´ÙÀ½°ú °°ÀÌ µ¿ÀÛÇÑ´Ù: ÇÔ¼ö´Â ¸ðµçµ¿ÀÛÀ» ¼ÒÄÏ(ù¹ø° Àμö:¼ÒÄÏ Æ÷ÀÎÅÍ)¿¡ ºí·°Å·(µÎ¹øÀç Àμö:true)³ª Æú½º(false)(¼¼¹ø° Àμö:false)·Î ¼³Á¤ÇÑ´Ù. ³Íºí·°Å·Á¦¾î¸¦ »ç¿ëÇϸé, ÇΰÅ(finger)ÇÔ¼ö´Â ´ÙÀ½°ú °°À»°ÍÀÌ´Ù:(¿ªÁÖ:¹«½¼¸»ÀÎÁö ¹ø¿ªÀÌ ÀÌ»óÇϳ׿ä)


        $fp = fsockopen($host, 79, &$errno, &$errstr) or die("$errno: [ ] $errstr");
        set_socket_blocking($fp, 0);
        fputs($fp, "$user\n");

        $stop = time() + $timeout;
        while (!feof($fp) && time() < $stop )
                echo fgets($fp, 128);
        fclose($fp);

³Íºí·¯Å· ¼ÒÄÏÄÝ(socket calls)À» »ç¿ëÇϱâ À§ÇÑ 3°³ÀÇ ÇÔ¼öÀÇ ¼öÁ¤Àº ´ç½ÅÀÇ ¿¬½ÀÀ» À§ÇØ ³²°ÜµÐ´Ù.
´ÙÀ½ ÀÌÀü Â÷·Ê