³×Æ®¿öÅ© ÇÁ·Î±×·¡¹Ö : connection Time ¾ò¾î¿À±â
ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®



joinc´Â Firefox¿Í chrome¿¡¼­ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼­´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.

ÀÌ ¹®¼­´Â ¿©·¯ºÐÀÌ TCP¿Í IP, pcap¿¡ ´ëÇÑ ±âº»ÀûÀÎ ÀÌÇØ¸¦ Çϰí ÀÖ´Ù°í °¡Á¤ÇÏ¿¡ ÀÛ¼ºµÇ¾ú´Ù. ´ÙÀ½ÀÇ ¹®¼­µéÀ» ¸ÕÀú Àо±â ¹Ù¶õ´Ù.

°£´ÜÇÑ ¹æ¹ýÀ¸·Î Connection ½Ã°£ ¾ò±â

ÃÖ±Ù QOS¿¡ °ü½ÉÀ» °¡Áö¸é¼­, ¼­ºñ½º ¿¬°á½Ã°£°ú transaction ½Ã°£À» ¾ò¾î¿À´Â ¹æ¹ý¿¡ ´ëÇØ¼­ °í¹ÎÇϱ⠽ÃÀÛÇß´Ù. °£´ÜÇϰԴ Á÷Á¢ ¼­ºñ½º¿¡ ¿¬°áÇÏ´Â ÇÁ·Î±×·¥À» ¸¸µé¾î¼­ µ¥ÀÌÅ͸¦ °¡Á®¿À´Âµ¥ °É¸®´Â ½Ã°£À» ÃøÁ¤ÇÏ´Â ÇÁ·Î±×·¥À» ¸¸µé ¼öµµ ÀÖÀ» °ÍÀÌ´Ù. ÇÊÀÚÀÇ °æ¿ì À¥¼­¹öÀÇ ÀÀ´ä½Ã°£À» Å×½ºÆ® Çϱâ À§Çؼ­ wget°ú °°Àº ÇÁ·Î±×·¥À» »ç¿ëÇϱ⵵ Çß´Ù.

±×·¯³ª ÀÌ·¯ÇÑ ÀÓ½ÃÀÇ ¹æ¹ýÀº ´ÙÀ½°ú °°Àº ¹®Á¦Á¡À» °¡Áø´Ù.
  1. connection time Àº ±¸ÇÒ ¼ö ¾ø´Ù.
  2. ´Ù¾çÇÑ Å¬¶óÀÌ¾ðÆ®¿¡¼­ÀÇ µ¥ÀÌÅÍ ÀÀ´ä½Ã°£À» ¾ò¾î³¾ ¼ö ¾ø´Ù.

QOS °üÁ¡¿¡¼­ º¸ÀÚ¸é, ÀÌ·¯ÇÑ ¹®Á¦Á¡Àº Ä¡¸íÀûÀÌ´Ù. QOS¸¦ À§ÇÑ´Ù¸é, ´Ù¾çÇÑ Áö¿ª°ú µµ¸ÞÀο¡¼­ÀÇ Á¤È®ÇÑ connection time°ú µ¥ÀÌÅÍ ÀÀ´ä½Ã°£À» Åë°è³»°í, À̸¦ ÀÌ¿ëÇØ¼­ ¼­ºñ½º¸¦ ÃÖÀûÈ­ ½Ãų ¼ö ÀÖ¾î¾ß Çϱ⠶§¹®ÀÌ´Ù.

ÆÐŶ ¼öÁØ¿¡¼­ÀÇ Connection ½Ã°£ ¾ò±â

±×·¡¼­ ÆÐŶÀ» Á÷Á¢ ºÐ¼®Çؼ­ connection ½Ã°£À» ¾ò¾î¿À´Â ÇÁ·Î±×·¥À» ¸¸µé¾î º¸±â·Î Çß´Ù. ÀÌ ÇÁ·Î±×·¥ÀÌ Á¦´ë·Î ÀÛµ¿µÈ´Ù¸é, Á»´õ È®ÀåÇØ¼­ ƯÁ¤ µµ¸ÞÀÎ ¿µ¿ªÀÇ ¸ðµç ÆÐŶ¿¡ Àû¿ëÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.

ÆÐŶÀ» ¾ò¾î¿À±â À§Çؼ­ libpcapÀ» »ç¿ëÇϱâ·Î Çß´Ù. libpcapÀº °ø°³µÈ ÆÐŶ´ýÇÁ ÇÁ·Î±×·¥À¸·Î snort¿Í °°Àº IDS(ħÀÔŽÁö ½Ã½ºÅÛ)µîÀÇ ÆÐŶºÐ¼® ¿£Áø¿¡µµ »ç¿ëµÇ°í ÀÖ´Ù.

ÆÐŶÀ» ¾ò¾î¿À´Â°Ç Å©°Ô ¹®Á¦°¡ µÇÁö ¾ÊÀ» °ÍÀÌ´Ù. ¹®Á¦´Â TCP/IP¿¡¼­ÀÇ connection °úÁ¤À» ÆÐŶÂ÷¿ø¿¡¼­ ÀÌÇØÇÏ´Â°Ô µÉ °ÍÀÌ´Ù. ±×·³ connection °úÁ¤À» ÆÐŶ ¼öÁØ¿¡¼­ ¾Ë¾Æº¸µµ·Ï ÇÏÀÚ.

ÆÐŶ¼öÁØ¿¡¼­ ¾Ë¾Æº¸´Â Connection °úÁ¤

TCP/IP ¿¡¼­ Connection¿¡ °ü¿©ÇÏ´Â ÇÁ·ÎÅäÄÝÀº TCPÀÌ´Ù. ¾Æ·¡¿Í °°ÀÌ 3¹øÀÇ ÆÐŶ ±³È¯À» ÅëÇØ¼­ ¿¬°áÀÌ ÀÌ·ç¾îÁö°Ô µÇ¹Ç·Î ÈçÈ÷ 3¹ø¾Ç¼ö±â¹ý(three-way handshake)¶ó°í ÇÑ´Ù.

three.png

°£´ÜÈ÷ ¿¹¸¦µé¾î¼­ ¾Ë¾Æº¸µµ·Ï ÇÏÀÚ. 80¹ø À¥¼­ºñ½º¿¡ ´ëÇÑ connectionÀÌ ÀϾ´Ù°í °¡Á¤Çغ¸ÀÚ. Ŭ¶óÀÌ¾ðÆ®´Â 5555 Æ÷Æ®¸¦ ÀÌ¿ëÇØ¼­ Á¢±ÙÀ» ÇÑ´Ù°í ÇÒ¶§, ´ÙÀ½°ú °°ÀÌ ³ªÅ¸³¾ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
  1. SRC PORT : 5555 --> DST PORT : 80
    SYN = 1
    SEQ = 350245447
    ACK_SEQ = 0;
  2. SRC PORT : 80 --> DST PORT : 5555
    SYN = 1
    SEQ = 196123544
    ACK_SEQ = 350245448
  3. SRC PORT : 80 --> DST PORT : 5555
    SYN = 0
    SEQ = 350245448
    ACK_SEQ = 196123545

ÇÁ·Î½ÃÁ®

ÀÌÁ¦ °£´ÜÇÏ°Ô connection timeÀ» üũÇÏ´Â ÇÁ·Î±×·¥ÀÇ °èȹÀ» ¼¼¿ï ¼ö ÀÖÀ» °ÍÀÌ´Ù. ÆÐŶÀÌ TCPÀ̰í, SYNÀÌ 1À̰í, ACK_SEQ°¡ 0À̶ó¸é, Ŭ¶óÀÌ¾ðÆ®·Î ºÎÅÍÀÇ ¿¬°áÀ̶ó°í º¼ ¼ö ÀÖÀ½À¸·Î À̶§ºÎÅÍ, ÇØ´ç Ŭ¶óÀ̾ðÆ®ÀÇ IP/PORT·ÎºÎÅÍ SEQ+1 ÆÐŶÀÌ ¿À´Â °ÍÀ» ±â´Ù·Á¼­, ±× °£°ÝÀ» ÃøÁ¤ÇÏ´Â °ÍÀÌ´Ù.

´ÙÀ½Àº ÇÁ·Î½ÃÁ® ÄÚµå´Ù.
if (tcp ÆÐŶÀ̶ó¸é) 
{ 
    if (tcp.syn == 1)     
    { 
        connection ±¸Á¶Ã¼¿¡, time, port, ip, seq¸¦ ¼³Á¤ÇÑ´Ù. 
    } 
    else 
    { 
        port¿Í ip°¡ µ¿ÀÏÇϰí seq == seq+1 À̶ó¸é 
        ¿¬°áÀÌ ¿Ï¼ºµÈ °ÍÀÌ´Ù. 
        connection ½Ã°£ = current time = time; 
    } 
} 
 

±¸Çö

ÀÌÁ¦ ¼­ºñ½ºÀÇ connection time À» üũÇÏ´Â ÇÁ·Î±×·¥À» ¸¸µé¾î º¸µµ·Ï ÇϰڴÙ. ´Ü ÀÌ ÇÁ·Î±×·¥Àº ´ÙÀ½°ú °°Àº Á¦¾àÀ» °¡Áø´Ù.
  • SRC PORT¸¸ ÀÏÄ¡
    ÆÐŶÀ» ¸íÈ®È÷ µ¿±âÈ­ ½Ã۱â À§Çؼ­´Â SRC IP, SRC PORT, SEQ3°³¸¦ ÀÏÄ¡½ÃÄÑ¾ß ÇÑ´Ù. ±×·¯³ª ¿©±â¿¡¼­´Â °£´ÜÈ÷ Çϱâ À§Çؼ­ SRC PORT¸¸ ÀÏÄ¡½Ã۵µ·Ï ÇϰڴÙ. Ŭ¶óÀ̾ðÆ®ÀÇ Æ÷Æ®´Â ´ë·« 1025-65536±îÁö À̹ǷÎ, ¹Ù»Û ¼­¹ö°¡ ¾Æ´ÑÇÑÀº °ãĥȮ·üÀÌ ±×¸® Å©Áö ¾ÊÀ» °ÍÀÌ´Ù.

    SEQµµ ÀÏÄ¡½ÃŰÁö ¾Ê¾Æµµ, ´ëºÎºÐÀÇ °æ¿ì¿¡´Â ¹®Á¦°¡ µÇÁö ¾ÊÀ» °ÍÀÌ´Ù. ±×·¯³ª half connection °ø°ÝÀ» ÇÏ°Ô µÉ°æ¿ì, µ¿ÀÏÇÑ Å¬¶óÀÌ¾ðÆ® PORT·Î °è¼ÓÇØ¼­ half ¿¬°áÀ» ½ÃµµÇÒ ¼ö ÀÖ´Ù. SEQ¸¦ ÀÏÄ¡½ÃŰÁö ¾Ê´Â´Ù¸é, ÀÌ·¯ÇÑ half connection °ø°ÝÀ» °Ë»çÇØ³»±â Èûµé¾î Áø´Ù.
#ifdef HAVE_CONFIG_H 
#include <config.h> 
#endif 
 
// Unix Standard Library 
#include <time.h> 
#include <unistd.h> 
#include <stdlib.h> 
 
#include <iostream> 
 
#include <pcap.h> 
 
#include <net/bpf.h> 
#include <netinet/in.h> 
 
#include <stdio.h> 
#include <stdlib.h> 
 
#include <netinet/ip.h> 
#include <netinet/tcp.h> 
#include <netinet/udp.h> 
#include <netinet/if_ether.h> 
#include <netinet/in.h> 
 
#include <net/if.h> 
#include <net/ethernet.h> 
#include <arpa/inet.h> 
 
#include <sys/socket.h> 
 
 
#define TCPHEADERSIZE 6*4 
 
using namespace std; 
 
enum MODE{NONPROMISCUOUS, PROMISCOUS}; 
 
struct _connect_Info 
{ 
  struct timeval start_Time; 
  int flag; 
}; 
int main(int argc, char *argv[]) 
{ 
  char errbuf[256]; 
  int ret; 
  struct _connect_Info  *connect_Info; 
 
  bpf_u_int32 netp; 
  bpf_u_int32 maskp; 
 
  char *dev; 
 
  struct pcap_pkthdr hdr; 
  struct ether_header *ep; 
  struct tcphdr    *tcph; 
  struct ip *iph; 
 
  struct timeval current_time; 
 
  struct sockaddr_in *sin; 
 
  const u_char *packet; 
 
  unsigned short ether_type; 
  pcap_t *pcd; 
 
  // 65536°³ ¸¸Å­ÀÇ Src Port¸¦ ÀúÀåÇÒ ¼ö ÀÖ´Â ÀÚ·á°ø°£À» ¸¸µç´Ù. 
  connect_Info = (struct _connect_Info *)malloc(sizeof(struct _connect_Info) * 65536); 
 
  dev = pcap_lookupdev(errbuf); 
  if (dev == NULL) 
  { 
    printf("%s\n", errbuf); 
    return 1; 
  } 
 
  // Non Promiscous ¸ðµå·Î ÀÌ´õ³Ý ÀåÄ¡¸¦ ¿¬´Ù. 
  pcd = pcap_open_live(dev, BUFSIZ, NONPROMISCUOUS, -1, errbuf); 
  if (pcd == NULL) 
  { 
    printf("%s\n", errbuf); 
    return 1; 
  } 
 
  // ÆÐŶÀ» ÀоîµéÀδÙ. 
  for (;packet=(const unsigned char *)pcap_next(pcd, &hdr);) 
  { 
    ep = (struct ether_header *)packet; 
    packet += sizeof(struct ether_header); 
    ether_type = ntohs(ep->ether_type); 
    // TCP/IP ÆÐŶÀÎ °æ¿ì¿¡¸¸ ºÐ¼®ÇÑ´Ù. 
    if (ether_type == ETHERTYPE_IP) 
    { 
      iph = (struct ip *)packet; 
      if(iph->ip_p == IPPROTO_TCP) 
      { 
        tcph = (struct tcphdr *)(packet + iph->ip_hl *4); 
        // syn ÀÌ 1Àϰæ¿ì 
        if (tcph->syn == 1) 
        { 
          gettimeofday(¤t_time, NULL); 
          // ACK_SEQ°¡ 0À̸é connection ½Ãµµ´Ù. 
          if (tcph->ack_seq == 0) 
          { 
            memcpy((void *)&connect_Info[ntohs(tcph->source)].start_Time, 
              (void *)¤t_time, sizeof(struct timeval)) ; 
            connect_Info[ntohs(tcph->source)].flag = 1; 
          } 
          // ±×·¸Áö ¾ÊÀ» °æ¿ì Server¿¡¼­ Client·ÎÀÇ ACK´Ù. 
          else 
          { 
            if (connect_Info[ntohs(tcph->dest)].flag == 1) 
            { 
              connect_Info[ntohs(tcph->dest)].flag = 2; 
            } 
          } 
        } 
        // ¿¬°áÀÌ ¸Î¾îÁ³´Ù. 
        if (connect_Info[ntohs(tcph->source)].flag == 2) 
        { 
          printf("%d -> %d\n", ntohs(tcph->source), ntohs(tcph->dest)); 
          printf("Connection Time %.4f msec\n", 
              (current_time.tv_sec - connect_Info[ntohs(tcph->source)].start_Time.tv_sec)*1000 + 
              (float)(current_time.tv_usec - connect_Info[ntohs(tcph->source)].start_Time.tv_usec)/1000.0); 
              memset((void *)&connect_Info[ntohs(tcph->source)], 0x00, sizeof(struct _connect_Info)); 
          printf("=========\n"); 
        } 
      } 
    } 
  } 
  return EXIT_SUCCESS; 
 
} 
 

´ÙÀ½Àº Å×½ºÆ® °á°ú´Ù. connection timeÀ» ¾ò¾î¿À´Â °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù. joinc ¼­¹ö¿¡¼­ Å×½ºÆ®ÇÑ °á°ú´Ù.
# ./con_time 
35512 -> 80 
Connection Time 0.0180 msec 
========= 
49187 -> 80 
Connection Time 0.0260 msec 
========= 
2564 -> 80 
Connection Time 0.0200 msec 
========= 
2565 -> 80 
Connection Time 0.0040 msec 
========= 
2567 -> 80 
Connection Time 0.0040 msec 
========= 
51374 -> 80 
Connection Time 0.0240 msec 
========= 
2568 -> 80 
Connection Time 0.0050 msec 
========= 
62272 -> 80 
Connection Time 0.0260 msec 
========= 
65186 -> 80 
Connection Time 0.0240 msec 
========= 
52408 -> 80 
Connection Time 0.0210 msec 
========= 
 

¾ÕÀ¸·Î ÇÒÀÏ

  • transaction time À» ¾ò¾î¿Â´Ù.
  • RRD(:12)¸¦ ÀÌ¿ëÇØ¼­, Åë°è Á¤º¸¸¦ Ãâ·ÂÇÑ´Ù.
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.