ÃÑ ÆäÀÌÁö ¼ö : 3224
![]()
|
Facebook Joinc ±×·ì
Joinc QA »çÀÌÆ®
![]()
Tweet
joinc´Â Firefox¿Í chrome¿¡¼ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.
ÀÌ ¹®¼´Â ¿©·¯ºÐÀÌ TCP¿Í IP, pcap¿¡ ´ëÇÑ ±âº»ÀûÀÎ ÀÌÇØ¸¦ Çϰí ÀÖ´Ù°í °¡Á¤ÇÏ¿¡ ÀÛ¼ºµÇ¾ú´Ù. ´ÙÀ½ÀÇ ¹®¼µéÀ» ¸ÕÀú Àо±â ¹Ù¶õ´Ù. °£´ÜÇÑ ¹æ¹ýÀ¸·Î Connection ½Ã°£ ¾ò±â
ÃÖ±Ù QOS¿¡ °ü½ÉÀ» °¡Áö¸é¼, ¼ºñ½º ¿¬°á½Ã°£°ú transaction ½Ã°£À» ¾ò¾î¿À´Â ¹æ¹ý¿¡ ´ëÇØ¼ °í¹ÎÇϱ⠽ÃÀÛÇß´Ù. °£´ÜÇϰԴ Á÷Á¢ ¼ºñ½º¿¡ ¿¬°áÇÏ´Â ÇÁ·Î±×·¥À» ¸¸µé¾î¼ µ¥ÀÌÅ͸¦ °¡Á®¿À´Âµ¥ °É¸®´Â ½Ã°£À» ÃøÁ¤ÇÏ´Â ÇÁ·Î±×·¥À» ¸¸µé ¼öµµ ÀÖÀ» °ÍÀÌ´Ù. ÇÊÀÚÀÇ °æ¿ì À¥¼¹öÀÇ ÀÀ´ä½Ã°£À» Å×½ºÆ® Çϱâ À§Çؼ wget°ú °°Àº ÇÁ·Î±×·¥À» »ç¿ëÇϱ⵵ Çß´Ù.
±×·¯³ª ÀÌ·¯ÇÑ ÀÓ½ÃÀÇ ¹æ¹ýÀº ´ÙÀ½°ú °°Àº ¹®Á¦Á¡À» °¡Áø´Ù.
ÆÐŶ ¼öÁØ¿¡¼ÀÇ Connection ½Ã°£ ¾ò±â
±×·¡¼ ÆÐŶÀ» Á÷Á¢ ºÐ¼®Çؼ connection ½Ã°£À» ¾ò¾î¿À´Â ÇÁ·Î±×·¥À» ¸¸µé¾î º¸±â·Î Çß´Ù. ÀÌ ÇÁ·Î±×·¥ÀÌ Á¦´ë·Î ÀÛµ¿µÈ´Ù¸é, Á»´õ È®ÀåÇØ¼ ƯÁ¤ µµ¸ÞÀÎ ¿µ¿ªÀÇ ¸ðµç ÆÐŶ¿¡ Àû¿ëÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
ÆÐŶÀ» ¾ò¾î¿À±â À§Çؼ libpcapÀ» »ç¿ëÇϱâ·Î Çß´Ù. libpcapÀº °ø°³µÈ ÆÐŶ´ýÇÁ ÇÁ·Î±×·¥À¸·Î snort¿Í °°Àº IDS(ħÀÔŽÁö ½Ã½ºÅÛ)µîÀÇ ÆÐŶºÐ¼® ¿£Áø¿¡µµ »ç¿ëµÇ°í ÀÖ´Ù.
ÆÐŶÀ» ¾ò¾î¿À´Â°Ç Å©°Ô ¹®Á¦°¡ µÇÁö ¾ÊÀ» °ÍÀÌ´Ù. ¹®Á¦´Â TCP/IP¿¡¼ÀÇ connection °úÁ¤À» ÆÐŶÂ÷¿ø¿¡¼ ÀÌÇØÇÏ´Â°Ô µÉ °ÍÀÌ´Ù. ±×·³ connection °úÁ¤À» ÆÐŶ ¼öÁØ¿¡¼ ¾Ë¾Æº¸µµ·Ï ÇÏÀÚ. ÆÐŶ¼öÁØ¿¡¼ ¾Ë¾Æº¸´Â Connection °úÁ¤
TCP/IP ¿¡¼ Connection¿¡ °ü¿©ÇÏ´Â ÇÁ·ÎÅäÄÝÀº TCPÀÌ´Ù. ¾Æ·¡¿Í °°ÀÌ 3¹øÀÇ ÆÐŶ ±³È¯À» ÅëÇØ¼ ¿¬°áÀÌ ÀÌ·ç¾îÁö°Ô µÇ¹Ç·Î ÈçÈ÷ 3¹ø¾Ç¼ö±â¹ý(three-way handshake)¶ó°í ÇÑ´Ù. ![]()
°£´ÜÈ÷ ¿¹¸¦µé¾î¼ ¾Ë¾Æº¸µµ·Ï ÇÏÀÚ. 80¹ø À¥¼ºñ½º¿¡ ´ëÇÑ connectionÀÌ ÀÏ¾î³´Ù°í °¡Á¤Çغ¸ÀÚ. Ŭ¶óÀÌ¾ðÆ®´Â 5555 Æ÷Æ®¸¦ ÀÌ¿ëÇØ¼ Á¢±ÙÀ» ÇÑ´Ù°í ÇÒ¶§, ´ÙÀ½°ú °°ÀÌ ³ªÅ¸³¾ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
ÇÁ·Î½ÃÁ®
ÀÌÁ¦ °£´ÜÇÏ°Ô 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 À» üũÇÏ´Â ÇÁ·Î±×·¥À» ¸¸µé¾î º¸µµ·Ï ÇϰڴÙ. ´Ü ÀÌ ÇÁ·Î±×·¥Àº ´ÙÀ½°ú °°Àº Á¦¾àÀ» °¡Áø´Ù.
#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 ========= ¾ÕÀ¸·Î ÇÒÀÏ
|
|
|
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù. |
|