Port Scannig °Ë»çÅø
ÃÑ ÆäÀÌÁö ¼ö : 3224

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



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

Port Scannig °Ë»çÅø

Port Scannig °Ë»çÅø

À± »ó¹è

dreamyun@yahoo.co.kr

교정 과정
교정 0.82003³â 8¿ù 28ÀÏ 9½Ã
ÃÖÃÊ ¹®¼­ÀÛ¼º


1절. ¼Ò°³

À̹ø¿¡´Â µÎ¹ø¿¡ °ÉÃÄ ´Ù·ç¾ú´ø libpcap±â¼úÀ» ÀÀ¿ëÇØ¼­ °¢ ¼­ºñ½º Æ÷Æ®¿¡ ´ëÇÑ ³×Æ®¿öÅ© Åë°è¹× Æ÷Æ®½ºÄ³´×À» °Ë»çÇÏ´Â ÇÁ·Î±×·¥À» ¸¸µé¾î º¸µµ·Ï ÇϰڴÙ.


2절. JPSD Á¦ÀÛ

À̹ø¿¡ ÀÛ¼ºÇϰíÀÚ ÇÏ´Â ÇÁ·Î±×·¥Àº JPSD¶ó´Â ´Ù¼Ò Ã̽º·¯¿î À̸§À» °¡Áø ÇÁ·Î±×·¥ÀÌ´Ù. ´«Ä¡ ë°ÚÁö¸¸ Joinc Port Scanning DecterÀÇ Ã¹ ±ÛÀÚ¸¦ µû¼­ À̸§À» Áö¾ú´Ù. ´Ù¼Ò °ÅºÎ°¨ÀÌ ´À²¸Áö´õ¶óµµ ±×·¯·Á´Ï ÇÏ°í ³Ñ¾î°¡Áֱ⠹ٶõ´Ù.


2.1절. ÇÁ·Î±×·¥¿¡ ´ëÇÑ °³·«ÀûÀÎ ±â´É¸í¼¼

2.1.1절. Port Scanning ŽÁö¹× PORT Åë°è

Å©·¡Å·À» Çϱâ À§Çؼ­ °¡Àå ¸ÕÀú ÇÏ´Â ÀÏÀº ¸ñÀûÀ¸·Î ÇÏ´Â ¼­¹ö¿¡ ´ëÇÑ Á¤º¸¸¦ ÃëµæÇÏ´Â ÀÛ¾÷À̸ç, À̸¦ À§ÇÑ °¡Àå ¼Õ½±°í È¿°úÀûÀÎ ¹æ¹ýÀº ¿­·ÁÀÖ´Â Æ÷Æ®¿¡ ´ëÇÑ Á¤º¸¸¦ ¾ò´Â ÀÛ¾÷ÀÌ´Ù. ÀÌ·¯ÇÑ Æ÷Æ®°Ë»öÀ» À§ÇÑ ´ëÇ¥ÀûÀÎ ÇÁ·Î±×·¥Àº nampÀÌ¸ç ¼­¹ö¿¡ Port ScanningÀÌ ÀÌ·ç¾îÁ³´Ù¸é ÁÖÀDZí°Ô ¼­¹ö¸¦ °¨½ÃÇØ¾ßµÉ Çʿ䰡 ÀÖ´Ù.

JPSDÀÇ ÁÖ¿ä ±â´ÉÀº PORTÅë°è¸¦ ³»°í À̸¦ ±âÃÊ·Î Port ScanningÀÌ ÀÖ¾ú´ÂÁö¸¦ È®ÀÎÇÑ´Ù.


2.1.2절. DOS°ø°Ý ŽÁö

DOS(DDOS)°ø°ÝÀº °ø°Ý±â¹ýÁß¿¡¼­µµ ¸Å¿ì °íÀüÀûÀÌ°í ¾îÂ¸é °í¸®Å¸ºÐÇÑ °ø°ÝÀÏ ¼öµµ ÀÖ°ÚÁö¸¸ ±¸ÇöÀÌ ¸Å¿ì ½¬¿îµ¥´Ù°¡ ¸¶¶¥È÷ Â÷´ÜÇÒ ¹æ¹ýÀÌ ¾ø±â ¶§¹®¿¡ °£È¤ ³×Æ®¿öÅ©(ȤÀº ´ÜÀÏ È£½ºÆ®)¿¡ ¸Å¿ì Ä¡¸íÀûÀÎ ¿µÇâÀ» Áֱ⵵ ÇÑ´Ù.

2003³â 1¿ù 25ÀÏ ¹ß»ýÇÑ ÀÎÅÍ³Ý ´ë¶õÀÌ ÀÌ·¯ÇÑ °æ¿ì´Ù. ¿øÀÎÀº SQL_HellÀ̶ó´Â ¿ú¹ÙÀÌ·¯½º ¶§¹®Àε¥ ÀÌ ¹ÙÀÌ·¯½º´Â MSSQLÀÇ resoultion¹ö±×¸¦ ÀÌ¿ëÇØ¼­ ƯÁ¤Æ÷Æ®·Î ¹«ÇÑÁ¤ ÆÐŶÀ» º¸³½´Ù. ¶ÇÇÑ ÁÖÀ§ÀÇ ¶Ç´Ù¸¥ MSSQL¼­¹ö¿¡ ħÅõ¿¡¼­ ÀÌ¿Í µ¿ÀÏÇÑ ÀÏÀ» ÇÏ°Ô µÇ°í °á±¹ Àüü ³×Æ®¿öÅ© ½Ã½ºÅÛÀÌ ¸ÀÀ̰¡°Ô µÇ¾ú´Ù. Àüü ³×Æ®¿öÅ© ½Ã½ºÅÛÀ¸·Î È®´ëµÇ±â´Â ÇßÁö¸¸ °á±¹ ƯÁ¤ ¼­ºñ½º¿¡ ´ëÇØ¼­ ´Ù·®ÀÇ ÆÐŶÀ» º¸³»¿¡¼­ È£½ºÆ®¸¦ ¸¶ºñ½ÃŰ°í ´ýÀ¸·Î ³×Æ®¿öÅ© Æ®·¡ÇÈÀ» Áõ°¡½ÃÄѼ­ ³×Æ®¿öÅ©¿¡ ¹®Á¦°¡ ¹ß»ýÇÏ´Â °ø°ÝÀ̶õ Á¡¿¡¼­ À̹ø ÀÎÅÍ³Ý ´ë¶õÀº (Á»´õ Áö´ÉÀûÀÎ)DOS °ø°Ý¿¡ ÀÇÇØ¼­ ÀϾ °ÍÀ¸·Î ºÐ¼®ÇÒ ¼ö ÀÖ´Ù.

¸¸¾à À̶§ ¶ó¿ìÅͳª ƯÁ¤ È£½ºÆ®¿¡ ÀÌ·¯ÇÑ DOS°ø°ÝÀ» ŽÁöÇÒ ¼ö ÀÖ´Â ÀåÄ¡°¡ ¸¶·ÃµÇ¾î ÀÖ¾ú´Ù¸é ±¹°¡ ÀüüÀÇ ³×Æ®¿öÅ© ½Ã½ºÅÛÀÌ ¸À°¡´Â ÀÏÀº ¸·À» ¼ö ÀÖ¾úÀ» °ÍÀÌ´Ù. ±âº»ÀûÀ¸·Î DOS°ø°ÝÀ» ¿Ïº®ÇÏ°Ô ¸·´Â°Ç °ÅÀÇ ºÒ°¡´ÉÇÏ´Ù°í ÇÒ ¼ö ÀÖÁö¸¸ ŽÁö´Â ±×¸® ¾î·ÆÁö ¾Ê°Ô °¡´ÉÇÏ´Ù.

¶ó¿ìÅͳª ȤÀº ÆÐŶÀ» °Ë»çÇÒ ¼ö Àִ ȣ½ºÆ®¿¡¼­ ÆÐŶÀ» °Ë»çÇÏ°í ÆÐŶ¿¡ ´ëÇÑ ¸ñÀûÁö Æ÷Æ®¹øÈ£¸¦ °¡Á®¿À°í ÀÌ¿¡ ´ëÇØ¼­ ÀÏÁ¤½Ã°£ °£°ÝÀ¸·Î Ä«¿îÆÃ Çϱ⸸ ÇÏ¸é µÈ´Ù. À̵é Ä«¿îÆÃ Å×ÀÌÅÍ´Â ÀÏÁ¤ÇÑ ½Ã°£´ÜÀ§·Î ÀúÀåµÇ¾î¼­ Æò±Õ°ªÀ» À¯ÁöÇϰí ÃÖ±ÙÀÇ Ä«¿îÆÃ µ¥ÀÌÅÍ¿Í ºñ±³ÇÏ¸é Æ¯Á¤ Æ÷Æ®·ÎÀÇ º¯È­¸¦ °¨Áö ÇÒ ¼ö ÀÖ°Ô µÈ´Ù. ¸¸¾à ƯÁ¤ Æ÷Æ®¿¡ ´ëÇØ¼­ Æò±ÕÄ¡¿¡ ºñÇØ °©Àڱ⠸¹Àº Ä«¿îÆÃÀÌ ¹ß»ýÇÑ´Ù¸é À̸¦ À§Çè½ÅÈ£·Î ÆÇ´ÜÇÏ¿© Á¶Ã븦 ÃëÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.

¿ì¸®°¡ ÀÛ¼ºÇÒ JPSD´Â ºñ·Ï Æ÷Æ®¿¡ ´ëÇÑ ´ë·«ÀûÀÎ Åë°è¿Í À̵é Åë°è¿¡ ´ëÇÑ ÀڷḦ ÀÌ¿ëÇÏ¿© PORT ScanningÀÌ ÀÌ·ç¾îÁö°í ÀÖ´ÂÁö È®ÀÎÇÏ´Â Á¤µµÀÌÁö¸¸, ´ÜÁö Æ÷Æ®¿¡ ´ëÇÑ Åë°è¸¸À» °¡Áö°í¼­µµ ´ë·«ÀûÀÎ DOS°ø°Ý¿¡ ´ëÇÑ Å½Áöµµ °¡´ÉÇÒ °ÍÀÌ´Ù.


2.2절. ±¸Çö ÇÁ·Î¼¼½º

¾ÆÀ̵ð¾î¸¦ (Á¦´ë·Î)±¸ÇöÇϱâ À§ÇÑ ÇÁ·Î¼¼½º´Â ±×¸® °£´ÜÇÏÁö°¡ ¾Ê´Ù.

ÀÏ´Ü È£½ºÆ®¿¡ ¼³Ä¡µÈ JPSD´Â ÀÚ½ÅÀÇ IP¸¦ ¸ñÀûÀ¸·Î Çϰí ÀÖ´Â ¸ðµç ÆÐŶ¿¡ ´ëÇØ¼­ °Ë»ç¸¦ ÇØ¾ß¸¸ ÇÑ´Ù. ÀÌ´Â RAW¼ÒÄÏÀ» ÀÌ¿ëÇØ¼­ °Ë»çÇÏ¸é µÈ´Ù.

ÆÐŶÀ» ¾ò¾ú´Ù¸é IPÇì´õ¸¦ °Ë»çÇØ¼­ ¸ñÀûÁö¿Í Æ÷Æ®¸¦ °Ë»çÇÑ´ÙÀ½ Æ÷Æ®¿¡ ´ëÇÑ Ä«¿îÆÃÀ» ½Ç½ÃÇÑ´Ù. Ä«¿îÆÃÀÌ µÇ¾ú´Ù¸é Ä«¿îÆÃ µÈ ¼ýÀÚ°¡ ÀÏÁ¤°¹¼ö¸¦ ÃʰúÇÏ´ÂÁö °Ë»çÇØ¾ß ÇÑ´Ù. À̶§ Ãʰú¿©ºÎ´Â µÎ°¡Áö ¹æ¹ý¿¡ ÀÇÇØ¼­ °Ë»çµÈ´Ù. ù¹øÂ°´Â Àý´ë°ª¿¡ ÀÇÇÑ °Ë»çÀ̸ç, µÎ¹øÂ°´Â ¿¹Àü¿¡ Á¶»çµÇ¾ú´ø Ä«¿îÆÃÀÇ Æò±Õ°ªÀ» ±¸ÇÏ°í ±× Æò±Õ°ª°ú ÇöÀçÀÇ °ªÀ» ºñ±³ÇÏ´Â ¹æ¹ýÀ¸·Î µÎ°¡Áö ¹æ¹ý ¸ðµÎ º´ÇàÇØ¼­ »ç¿ëÇÑ´Ù. ÀÌ Æò±Õ°ªÀ» ±¸ÇÏ´Â °Í ¿ª½Ã ±×¸® °£´ÜÇÏÁö°¡ ¾Ê´Ù. ´ÜÁö Æò±Õ°ªº¸´Ù ¾ó¸¶¸¦ Ãʰú Çß´À³Ä¸¦ ±¸ÇÏ´Â°Ô ¾Æ´Ñ Áõ°¡À²À» ±¸ÇØ¾ß Çϱ⠶§¹®ÀÌ´Ù. ¶ÇÇÑ µ¿ÀÏÇÑ Áõ°¡À²À̶ó°í ÇÏ´õ¶óµµ Ä«¿îÆÃ°¹¼ö¿¡ µû¶ó ´Þ¶óÁ®¾ß ÇÑ´Ù. ¿¹¸¦ µé¾î Æò±Õ Ä«¿îÆÃ °¹¼ö°¡ 100000°³Àε¥ °¡Àå ÃÖ±Ù Ä«¿îÆÃ °¹¼ö°¡ 200000À̶ó¸é DOS·ùÀÇ °ø°ÝÀ¸·Î ÀǽÉÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ±×·¯³ª 10°³¿¡¼­ 20°³·Î ´Ã¾î³µÀ» °æ¿ì ´ÜÁö 2¹èÀÇ Áõ°¡À²À» º¸¿´´Ù°í ÇØ¼­ DOS·ùÀÇ °ø°ÝÀ¸·Î ÀǽÉÇÒ ¼ö´Â ¾øÀ» °ÍÀÌ´Ù.

°Ô´Ù°¡ ÀÌ·¯ÇÑ Á¤º¸µéÀ» ÆÄÀÏ·Î ÀúÀåÇϰí ÀÖ¾î¾ß ÇÑ´Ù. ÆÄÀÏ·Î ÀúÀåµÈ Á¤º¸¶ó¸é ±×·¡ÇÁ·Î À̵é Á¤º¸¸¦ º¸¿©ÁÙ ¼öµµ ÀÖÀ» °ÍÀÌ´Ù. Á¦´ë·Î ¸¸µé·Á¸é ÀÌ·¡ Àú·¡ ÇØ°áÇØ¾ß µÉ ¹®Á¦µéÀÌ ²Ï ¸¹´Ù.

¿©±â¿¡¼­´Â ÀÌ·± º¹ÀâÇÑ °Íµé¿¡ ´ëÇØ¼­ ½Å°æ¾²Áö ¾ÊÀ» °ÍÀÌ´Ù. ´ÜÁö Æ÷Æ®¿¡ ´ëÇÑ Ä«¿îÆ®¸¦ °Ë»çÇϰí ÀÏÁ¤½Ã°£ ÈÄ¿¡ À̸¦ Ãâ·ÂÇØ¼­ DOS°ø°ÝÀÎÁö¿¡ ´ëÇÑ ÆÇ´ÜÀº À¯Àú¿¡°Ô ¸Ã±âµµ·Ï ÇÒ °ÍÀÌ´Ù. »ç¿ë°í 5ºÐ´ÜÀ§·Î Ä«¿îÆÃµÈ Á¤º¸¸¦ Ŭ¶óÀÌ¾ðÆ®·Î Àü´ÞÇÏ´Â Á¤µµÀÇ ±â´É¸¸ Æ÷ÇÔ ½Ã۵µ·Ï ÇϰڴÙ.

Á¦´ë·Î ÀÛµ¿ÇÏ´Â DOS°ø°Ý ŽÁö ÇÁ·Î±×·¥Àº °³ÀÎÀûÀ¸·Î º°µµÀÇ ÇÁ·ÎÁ§Æ®·Î ÁøÇàÇÒ »ý°¢À¸·Î ¶§°¡ µÇ¸é °ø°³Çϵµ·Ï ÇϰڴÙ. (±× ¶§°¡ ¾ðÁ¦°¡ µÉ·±Áö´Â ¾Æ¹«µµ ¸ð¸¥´Ù -.-);


3절. ¿¹Á¦

´ÙÀ½Àº ¿¹Á¦ ÇÁ·Î±×·¥ÀÌ´Ù. ¾ðÁ¦³ª ó·³ ÄÚµå´Â ±ò²û, È¿À², È¿°úÀû..°ú´Â °Å¸®°¡ ¸Õ ±×³É µ¹¾Æ°¡´Â ÇѸ¶µð·Î ¸»Çؼ­ ÃÖ¼ÒÇÑÀÇ ±â´É±¸Çö¿¡¸¸ ½Å°æÀ» ¾²¸é¼­ ÀÛ¼ºµÇ¾ú´Ù. (ÇѸ¶µð·Î ±ÍÂú¾Æ¼­ ´ëÃæ´ëÃæ ÀÛ¼ºÇÑ -.-);

Á»´õ ±×·²µíÇÏ°Ô ¸¸µå´Â°Ç °¢ÀÚÀÇ ¸òÀ¸·Î ³²°ÜµÎµµ·Ï ÇϰڴÙ.

¿¹Á¦ : jpsd.cc

#include <pcap.h>
#include <net/bpf.h>
#include <time.h>
#include <sys/time.h>
#include <netinet/in.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <pthread.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/ioctl.h>
#include <sys/socket.h>
#include <sys/types.h>


#include <string>
#include <set>
#include <ncurses.h>

using namespace std;


#define PROMISCOUS        1
#define NONPROMISCUOUS    0

#define PORT_NUM        65536

// ¹ÂÅØ½º Àá±Ý¿ë ¹ÂÅØ½º Àá±Ý º¯¼ö
pthread_mutex_t  m_lock = PTHREAD_MUTEX_INITIALIZER; 

// Æ÷Æ®º° Ä«¿îÆ®¿Í »çÀÌÁ ÀúÀåÇϱâ À§ÇÑ ±¸Á¶Ã¼
typedef struct _port_count
{
    int count;
    int size;
} port_count;

// 0-64435 ¹üÀ§ÀÇ ¸ðµç IP ÆÐŶ¿¡ ´ëÇÑ Ä«¿îÆÃ 
// Á¤º¸¸¦ ÀúÀåÇÑ´Ù. 
static port_count gport_count[PORT_NUM];

// IP¹× TCPÇì´õ ±¸Á¶Ã¼
struct ip        *iph;
struct tcphdr    *tcph;

static WINDOW *infoview;

// Åë°è°Ë»ç¸¦ ÇÒ¶§ PORT_NUM¸¸Å­ ·çÇÁ¸¦ µµ´Â°Ç 
// ÀÚ¿ø³¶ºñ´Ù. ´ëºÎºÐÀÇ PORTÀÇ °æ¿ì 
// Ä«¿îÆÃÀÌ 0ÀÏ °ÍÀ̱⠶§¹®ÀÌ´Ù. 
// ±×·¡¼­ Ä«¿îÆÃµÈ PORT¸¸ º°µµ·Î ÀúÀåÇÏ´Â ÀڷᱸÁ¶¸¦ 
// ÁغñÇØ¼­ 
// Åë°è½Ã ÀÌ ÀڷᱸÁ¶¿¡ µî·ÏµÈ Æ÷Æ®¿¡ ´ëÇØ¼­¸¸ 
// Åë°è¸¦ ³»µµ·Ï ÇÑ´Ù. 
set<int> port_set; 

// ÇöÀç IP¸¦ ¾ò¾î¿Â´Ù.
ulong GetIP(char *);

// »ç¿ëÀÚ°¡ Ctrl+C¸¦ ´­·¶À» ¶§ 
// ½ÇÇàµÇ´Â ½Ã±×³Î Çڵ鷯·Î ÇÁ·Î±×·¥À» Á¾·áÇÑ´Ù.
void sigint(int signo)
{
    endwin();    
    printf("Exit\n");
    exit(0);
}

// Æ÷Æ® Ä«¿îÆ® Åë°èÁ¤º¸¸¦ ¾ò¾î¿Í¼­ È­¸é¿¡ 
// Ãâ·ÂÇÑ´Ù.
void *staticsview(void *data)
{
    int prev_count = 0;
    int prev_size  = 0;
    int count = 0;
    int size  = 0;
    int loop_num = 1;
    time_t current_time = time((time_t *)NULL);
    set<int>::iterator si;
    while(1)
    {
        // 10ÃÊ ´ÜÀ§·Î Åë°è¸¦ ³½´Ù.
        sleep(10);
        
        pthread_mutex_lock(&m_lock);
        si = port_set.begin();
        count = 0;
        size  = 0;
        // ¸¸¾à µî·ÏµÈ Æ÷Æ®°¡ 200ÀÌ»óÀ̶ó¸é 
        // Æ÷Æ® ½ºÄ³´× °ø°ÝÀÌ ÀÖ¾ú´Ù°í °£ÁÖÇϰí 
        // WARNÀ» ¹ß»ýÇÑ´Ù. 
        if (port_set.size() > 200)
        {
            mvprintw(19, 1,"WARN  : PORT SCANNING %s %d", 
                ctime(&current_time), port_set.size());
        }

        // Æ÷Æ® Åë°è¸¦ ³½´Ù.
        // Æ÷Æ® Ä«¿îÆ®°¡ 5ÀÌÇÏÀÎ Æ÷Æ®ÀÇ Á¤º¸´Â »èÁ¦ÇÑ´Ù. 
        while(si != port_set.end())
        {
            count += gport_count[*si].count;
            size  += gport_count[*si].size; 
            if (gport_count[*si].count < 5) 
            {
                port_set.erase(si);
            }
            *si++;
        }
        pthread_mutex_unlock(&m_lock);
        // Æ÷Æ® Åë°è Á¤º¸¸¦ È­¸é¿¡ Ãâ·ÂÇÑ´Ù. 
        mvprintw(20, 1,"TOTAL : %11d  %d", count, size);
        mvprintw(21, 1,"AVG   : %11d  %d", count/loop_num, size/loop_num);
        mvprintw(22, 1,"DIFF  : %11d  %d", abs(count - prev_count), 
                                        abs(size - prev_size));
        prev_count = count;
        prev_size  = size;

        loop_num++;
    }
}

// È­¸é ÃʱâÈ­¸¦ ÇÑ´Ù. 
// µÞ¹è°æÀº ÆÄ¶õ»ö, ±ÛÀÚÀÇ »öÀº ÇϾá»öÀ¸·Î ÇÑ´Ù.
void init_scr()
{
    initscr();
    start_color();
    init_pair(1, COLOR_WHITE, COLOR_BLUE);
    curs_set(2);
    noecho();
    keypad(stdscr, TRUE);
}

int main(int argc, char **argv)
{
    char *dev;
    int  n;

    bpf_u_int32  netp;
    bpf_u_int32  maskp;    

    char errbuf[PCAP_ERRBUF_SIZE];
    int ret;
    struct pcap_pkthdr hdr;
    const u_char *packet;
    struct ether_header *ep;    
    struct ip *iph;
    struct sockaddr_in *sin;

    ulong myip; 
    unsigned short ether_type;
    pthread_t thread_i;

    // SIGINT¿¡ ´ëÇÑ ½Ã±×³Î Çڵ鷯¸¦ µî·ÏÇÑ´Ù.    
    // »ç¿ëÀÚ°¡ Ctrl+C¸¦ ÀÌ¿ëÇØ¼­ SIGINT¸¦ ¹ß»ý½Ã۸é 
    // endwin()À» È£ÃâÇϰí ÇÁ·Î±×·¥À» Á¾·áÇÑ´Ù.  
    if(signal(SIGINT, sigint) == SIG_ERR)
    {
        perror("signal setting error : ");
        exit(0);
    } 

    // È­¸éÀ» ÃʱâÈ­ ½ÃŲ´Ù.
    init_scr();
    bkgd(COLOR_PAIR(1));
    infoview = subwin(stdscr, 1, 80, 0, 0);

    // Åë°è ¾²·¹µå »ý¼º
    if ((n = pthread_create(&thread_i, NULL, staticsview, NULL)) != 0)
    {
        perror("thread create error ");
        exit(0);    
    }

    pcap_t *pcd;
    dev = pcap_lookupdev(errbuf);
    if (dev == NULL)
    {
        printf("%s\n", errbuf);
        exit(1);
    }
    myip = GetIP(dev);
    sin->sin_addr.s_addr =  myip;

    move(1,1);
    printw("DEV IS %s : %s", dev, inet_ntoa(sin->sin_addr));
    ret = pcap_lookupnet(dev, &netp, &maskp, errbuf);
    if (ret == -1) 
    {
        printf("%s\n", errbuf);
        exit(1);
    }
    refresh();

    pcd = pcap_open_live(dev, BUFSIZ, NONPROMISCUOUS, -1, errbuf);
    if (pcd == NULL)
    {
        printf("%s\n", errbuf);
        exit(1);
    }

    memset(gport_count, 0x00, PORT_NUM*sizeof(port_count));
    int i = 0;
    int k;
    set<int>::iterator si;

    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); 
        // ÆÐŶÀÌ IP±â¹ÝÀÏ °æ¿ì Ä«¿îÆÃÀ» ½Ç½ÃÇÑ´Ù.
        if(ether_type == ETHERTYPE_IP)
        {
            iph = (struct ip *)packet;
            if (myip == iph->ip_dst.s_addr)    
            {
                tcph = (struct tcphdr *)(packet + iph->ip_hl * 4);
                gport_count[ntohs(tcph->dest)].count++;
                gport_count[ntohs(tcph->dest)].size += ntohs(iph->ip_len);
                port_set.insert(ntohs(tcph->dest));

                pthread_mutex_lock(&m_lock);
                si = port_set.begin();
                k = 0;
                // Ä«¿îÆÃµÈ Á¤º¸´Â ½Ç½Ã°£À¸·Î È­¸é¿¡ Ãâ·ÂÇÑ´Ù.
                while (si != port_set.end())        
                {
                    if (gport_count[*si].count > 5)
                    {
                        mvprintw(k+2, 1,"%6d : %11d %11d", *si, 
                            gport_count[*si].count,
                            gport_count[*si].size); 
                        k++;
                    }
                    *si++;
                }
                pthread_mutex_unlock(&m_lock);
                refresh();
            }
            i++;
        }
    }
    endwin();
}


ulong GetIP(char *device)
{
    struct ifreq ifr;
    struct sockaddr_in *sin;
    int fd ;

    memset((void *)&ifr, 0x00, sizeof(ifr));
    fd = socket(AF_INET, SOCK_STREAM, 0);
    if(fd < 0)
    {
        perror("socket ");
        exit(0);
    }
    strncpy(ifr.ifr_name, device, 12);

    ioctl(fd, SIOCGIFADDR, (char *)&ifr);
    sin = (struct sockaddr_in *)&ifr.ifr_addr;

    close(fd);
    return (ulong)sin->sin_addr.s_addr;
}
		
È­¸é Ãâ·ÂÀ» À§Çؼ­ ncurses¶óÀ̺귯¸®¸¦ »ç¿ëÇß´Ù ncurses¿¡ ´ëÇÑ Á¤º¸´Â ncurses ÇÁ·Î±×·¡¹ÖÀ» Âü°íÇϱ⠹ٶõ´Ù. Æ÷Æ® Åë°è¸¦ À§Çؼ­ »ç¿ëÇÑ pcap¶óÀ̺귯¸®¿¡ ´ëÇÑ ¼³¸íÀº libpcap¸¦ ÀÌ¿ëÇÑ ÇÁ·Î±×·¡¹ÖÀ» Âü°íÇÏ¸é µÈ´Ù.

ncurses¿Í libpcap¿¡ ´ëÇÑ ÀÌÇØ¸¸ °¡Áö°í ÀÖ´Ù¸é ÁÖ¼®¸¸À¸·Îµµ ÃæºÐÈ÷ ÀÌÇØ°¡´ÉÇÑ ÄÚµåÀÌ´Ù. ÄÄÆÄÀÏ ¹æ¹ýÀº ´ÙÀ½°ú °°´Ù.

# g++ -o jpsd jpsd.cc -lpthread -lpcap -lpthread
		
´ÙÀ½ÀÇ ÇÊÀÚÀÇ »çÀÌÆ®¿¡¼­ ½ÇÁ¦·Î jpsd¸¦ ½ÇÇà½ÃŲ °á°úÀÇ È­¸éÀÌ´Ù.

그림 1. jpsdÀÇ ½ÇÇàÈ­¸é

Á¤¸»·Î port scanÀ» °Ë»çÇØ ³¾ ¼ö ÀÖ´ÂÁöÀÇ È®ÀÎÀ» ¿øÇÑ´Ù¸é nmapµîÀ» ÅëÇØ¼­ Å×½ºÆ® ÇØº¸±â ¹Ù¶õ´Ù.


4절. °á·Ð

ÀÌ»ó libpcapÀ» ÀÌ¿ëÇØ¼­ Æ÷Æ®Åë°è¿Í Æ÷Æ® ½ºÄ³´×À» °Ë»çÇØ³»´Â ÇÁ·Î±×·¥À» ¸¸µé¾î º¸¾Ò´Ù. À§ÀÇ ÇÁ·Î±×·¥Àº ¸Å¿ì ¾ÆÀ̵ð¾óÇÑ ÇÁ·Î±×·¥À¸·Î ½ÇÁ¦ ±×·²µíÇÏ°Ô ÀÛµ¿Çϱâ À§Çؼ­´Â ¸¹Àº ±â´ÉµéÀÌ Ãß°¡µÇ¾î¾ß¸¸ ÇÒ°ÍÀÌ´Ù.

¿ì¼±Àº °á°ú°ªÀ» ³×Æ®¿öÅ©¸¦ ÅëÇØ¼­ ¿ø°ÝÁö¿¡ Àü¼ÛÇÒ ¼ö ÀÖµµ·Ï ¼­¹ö/Ŭ¶óÀÌ¾ðÆ® ¸ðµ¨·Î È®Àå½ÃÄÑ¾ß Çϸç, Á¤È®ÇÑ Åë°è¸¦ À§Çؼ­ Åë°è°á°ú°ªÀ» ÆÄÀÏÀ̳ª DB·Î ³²±â´Â ±â´ÉÀ» Ãß°¡½ÃÄÑ¾ß ÇÑ´Ù. ¶ÇÇÑ ¹®Á¦°¡ ¹ß»ýÇßÀ» °æ¿ì ¹®Á¦µÉ¸¸ÇÑ IP¿¡ ´ëÇÑ ¸ñ·ÏÀ» Ãâ·ÂÇÏ´Â ±â´Éµµ Æ÷ÇԵǾî¾ß ÇÑ´Ù.

º¸¿©ÁÖ´Â °Í ¿ª½Ã Åõ¹ÚÇÑ Å͹̳Πȭ¸é º¸´Ù´Â GUIÈ­¸éÀ» ÅëÇØ¼­ ½±°Ô °á°ú¸¦ È®Àΰ¡´É Çϵµ·Ï ¸¸µé¾î ÁÖ¾î¾ß ÇÒ°ÍÀÌ´Ù.

À§¿¡¼­ ¾ð±ÞÇßµíÀÌ ÇÊÀÚ´Â Á»´õ ±×·²µíÇÏ°Ô ÀÛµ¿ÇÏ´Â ÇÁ·Î±×·¥À» ¸¸µå´Â ÇÁ·ÎÁ§Æ®¸¦ ÁøÇàÇÒ °èȹÀ̸ç, ¾î´ÀÁ¤µµ ¿Ï¼ºµÇ¾úÀ» °æ¿ì °ø°³ÇÒ ¿¹Á¤ÀÌ´Ù.


category_network
programing
category__5
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.