unicode('๋ฐฐ','utf-8', 'replace').encode('euc-kr')
์ฐ๋ฆฌ ์ํ 495-156526-02-001 (๋จ์ํ)
http://www.freenetpages.co.uk/hp/alan.gauld/tutintro.htm
http://search.costcentral.com/search?p=Q&srid=S9-3&lbc=costcentral&ts=custom&w=ThinkPad&uid=975848396&method=and&isort=price&srt=150
http://dojeun.egloos.com/315019/
์ฌ๋ฆ์ธ๋ฐ ๋๋ฌ๊ฐ๋!
๋ง์ง๋ง ์ฌ์ง์ ์ง์ค์...?
ReadMe.txt
์ํค์ ์ข ๋ฅ ์๋
...
์ด ๋ฐ์๋ ์ฌ๋ฌ๊ฐ์ง ์ธ์ด๋ก ๋ง๋ ์ํค๊ฐ ์๋ค. ๋งคํฌ๋ก๋ฅผ ํ๋ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ์ด ๋ชจ๋ ๋ค๋ฅด๋ค. ์ฌ๋ฌ ์ํค์ ์ ์ฉํ ์ ์๋ ํ๋ฌ๊ทธ์ธ์ ๋ง๋ค ์ ์์๊น?
----
์์ด๋ก ๋งํด์ผ ํ๋ ํ๊ฒฝ์ ์ ํ๊ณ ๋ต๋ตํจ์ ๋๋ผ๋ฉด ์์ด๊ณต๋ถ ํด์ผ๊ฒ ๋ค๋ ๋งค์ฐ ํฐ ๋๊ธฐ๊ฐ ์๊ธด๋ค.
์ง๊ธ ๋จ์ด๊ณต๋ถ๊ฐ ํ์ํ๋ค.
์ฐ๊ธฐ ํ๋ จ์
์์ด๋ก์ผ๊ธฐ์ฐ๊ธฐ๋ฅผ ํด์ผํ ๊น? ์์ง ์ ๋ชจ๋ฅด๊ฒ ๋ค.
svn://zeropage.org/home/SVN/leonardong
htpp://zeropage.org/trac/leonardong/
----
์๋ฒ
ํด๋ผ์ด์ธํธ
ObserverPattern ์ฐ์ต
์ ๋ฌธ์ ๋น์ ๋ก ๋ค๋ฉด ์ญํ ์ด ๋ ๊ฐ๋ก ๋๋๋ค. ํ์ชฝ์ ์ ๋ฌธ๋ด์ฉ์ ์ํ๋ ๋๋ก ํธ์งํ๋ ์ ๋ฌธ์ฌ, ํ์ชฝ์ ์ ๋ฌธ ๋ด์ฉ์ ์ ๋ณดํ๋ ์ทจ์ฌ ๊ธฐ์์ด๋ค.
์ฐ๋ฆฌ์ ์ทจ์ฌ ๊ธฐ์๋ ๋๋ฌด๋ ์๋ช ์์์ด ๊ฐํ๊ธฐ ๋๋ฌธ์ ์์ ์ด ์๋ก ์๊ฒ ๋ ์ ๋ณด๋ฅผ ์ฆ๊ฐ ์ ๋ฌธ์ฌ์ ์๋ฆฐ๋ค. ๋ํ ์ด๋ค ์ ๋ฌธ์ฌ ์ชฝ์์ ๊ธฐ์์๊ฒ ์ ๋ณด๊ฐ ํ๋ ธ๋ค๊ณ ์๋ ค์ฃผ๋ฉด, ๊ธฐ์๋ ๋ค๋ฅธ ์ ๋ฌธ์ฌ์๊ฒ๋ ๋ชจ๋ ์๋ก์ด ์ ๋ณด๋ฅผ ์๋ ค์ค๋ค.

/* Packet Sniffer 12.10.02 Made By KT RFC 768 User Datagram Protocol RFC 791 Internet Protocol RFC 792 Internet Control Message Protocol RFC 793 Transmission Control Protocol */ #define MAX_PACKET_SIZE 65525 #define BIND2IP "165.194.17.76" //Put you'r IP in her #include <stdio.h> #include <winsock2.h> #include <mstcpip.h> #include <ws2tcpip.h> typedef struct iphdr { unsigned char VerIHL; //Version and IP Header Length unsigned char Tos; unsigned short Total_len; unsigned short ID; unsigned short Flags_and_Frags; //Flags 3 bits and Fragment offset 13 bits unsigned char TTL; unsigned char Protocol; unsigned short Checksum; unsigned long SrcIP; unsigned long DstIP; //unsigned long Options_and_Padding; } IpHeader; typedef struct port { unsigned short SrcPort; unsigned short DstPort; } TcpUdpPort; void ProcessPacket(char* Buffer, int Size) { IpHeader *iphdr; TcpUdpPort *port; struct sockaddr_in SockAddr; unsigned short iphdrlen; char C; iphdr = (IpHeader *)Buffer; iphdrlen = (iphdr->VerIHL << 4); memcpy(&C, &iphdrlen, 1); iphdrlen = (C >> 4) * 4; //20 memset(&SockAddr, 0, sizeof(SockAddr)); SockAddr.sin_addr.s_addr = iphdr->SrcIP; printf("Packet From: %s ", inet_ntoa(SockAddr.sin_addr)); memset(&SockAddr, 0, sizeof(SockAddr)); SockAddr.sin_addr.s_addr = iphdr->DstIP; printf("To: %s ", inet_ntoa(SockAddr.sin_addr)); switch (iphdr->Protocol) { case 1: printf("Protocol: ICMP "); break; case 2: printf("Protocol: IGMP "); break; case 6: printf("Protocol: TCP "); if (Size > iphdrlen) { port = (TcpUdpPort *)(Buffer + iphdrlen); printf("From Port: %i To Port: %i ", ntohs(port->SrcPort), ntohs(port->DstPort)); } break; case 17: printf("Protocol: UDP "); if (Size > iphdrlen) { port = (TcpUdpPort *)(Buffer + iphdrlen); printf("From Port: %i To Port: %i ", ntohs(port->SrcPort), ntohs(port->DstPort)); } break; default: printf("Protocol: %i ", iphdr->Protocol); } printf("n"); } void StartSniffing(SOCKET Sock) { char *RecvBuffer = (char *)malloc(MAX_PACKET_SIZE + 1); int BytesRecv, FromLen; struct sockaddr_in From; if (RecvBuffer == NULL) { printf("malloc() failed.n"); exit(-1); } FromLen = sizeof(From); do { memset(RecvBuffer, 0, MAX_PACKET_SIZE + 1); memset(&From, 0, sizeof(From)); BytesRecv = recvfrom(Sock, RecvBuffer, MAX_PACKET_SIZE, 0, (sockaddr *)&From, &FromLen); if (BytesRecv > 0) { ProcessPacket(RecvBuffer, BytesRecv); } else { printf( "recvfrom() failed.n"); } } while (BytesRecv > 0); free(RecvBuffer); } int main() { WSAData wsaData; SOCKET Sock; struct sockaddr_in SockAddr; DWORD BytesReturned; int I = 1; try { if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) { printf("WSAStartup() failed.n"); exit(-1); } Sock = socket(AF_INET, SOCK_RAW, IPPROTO_IP); if (Sock == INVALID_SOCKET) { printf("socket() failed.n"); exit(-1); } memset(&SockAddr, 0, sizeof(SockAddr)); SockAddr.sin_addr.s_addr = inet_addr(BIND2IP); SockAddr.sin_family = AF_INET; SockAddr.sin_port = 0; if (bind(Sock, (sockaddr *)&SockAddr, sizeof(SockAddr)) == SOCKET_ERROR) { printf("bind(%s) failed.n", BIND2IP); exit(-1); } if (WSAIoctl(Sock, SIO_RCVALL, &I, sizeof(I), NULL, NULL, &BytesReturned, NULL, NULL) == SOCKET_ERROR) { printf("WSAIoctl() failed.n"); exit(-1); } StartSniffing(Sock); } catch (...) { printf("CRASHn"); } closesocket(Sock); WSACleanup(); return 0; }----
์ํค์ ์ข ๋ฅ ์๋
...
----
์์ด๋ก ๋งํด์ผ ํ๋ ํ๊ฒฝ์ ์ ํ๊ณ ๋ต๋ตํจ์ ๋๋ผ๋ฉด ์์ด๊ณต๋ถ ํด์ผ๊ฒ ๋ค๋ ๋งค์ฐ ํฐ ๋๊ธฐ๊ฐ ์๊ธด๋ค.
์ง๊ธ ๋จ์ด๊ณต๋ถ๊ฐ ํ์ํ๋ค.
์ฐ๊ธฐ ํ๋ จ์

svn://zeropage.org/home/SVN/leonardong
htpp://zeropage.org/trac/leonardong/
----
์๋ฒ
~cpp from SocketServer import * import thread from threading import * HOST = ('127.0.0.1', 9999) ClientList = [] bufsize = 1024 class ConnectManager(Thread): def __init__(self, conn): Thread.__init__(self) self.conn = conn def run(self): print self.conn.getpeername() while True: try: self.conn.send("I'm the Boss") data = self.conn.recv(bufsize) print data except: self.conn.close() break class MyServer(BaseRequestHandler): def handle(self): conn = self.request print conn if conn: connManager = ConnectManager(self.request) connManager.start() connManager.run() ClientList.append(connManager) def finish(self): print "finished" def setup(self): print "setup" if __name__ == "__main__": my_server = ThreadingTCPServer(HOST, MyServer) my_server.serve_forever()
~cpp //Project -> Setting -> LINK ๋ฉ๋ด -> Object/library modules: ์ ๋๋ถ๋ถ์ ws2_32.lib ๋ฅผ ์ถ๊ฐํ๋ค. #include <stdio.h> #include <winsock2.h> #define PORT 9999 // ์๋ฒ์ 9999๋ฒ ํฌํธ๋ฅผ ์ฐ๋ค #define BACKLOG 5 #define SERVER_IP "127.0.0.1" void error(char *buf) { puts(buf), exit(1); } main(){ WSADATA wsaData; SOCKET server_sock; // ์๋ฒ์ socket์ ์์ฑ SOCKADDR_IN server_addr; // ๋คํธ์ํฌ์ ์ ๋ณด๋ฅผ ๋ด์ structure ์์ฑ. char msg[] = "My name is Na Hwidong,."; char question[200]; int queslen; if( WSAStartup(MAKEWORD(2,2), &wsaData) == -1 ) error("WSAStartup Error"); // socket ์ค์ // ํ๋ก๊ทธ๋๋จธ๋ ์ด๊ฒ์ ํตํด ๋คํธ์ํฌ์ ๋ํ๋ฅผ ํ๋ค. server_sock = socket(AF_INET, SOCK_STREAM, 0); if( server_sock == -1 ) error("server socket error"); // ๋คํธ์ ์ ๋ณด ์ค์ // ์ด๊ฒ์ ํ๋ก๊ทธ๋จ์ด socket๊ณผ ์ฐ๊ฒฐํ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ค. memset((SOCKADDR_IN *)&server_addr, 0, sizeof(SOCKADDR_IN)); // struct sockaddr_in -> SOCKADDR_IN server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = inet_addr(SERVER_IP); // ๋ก์ปฌ ์ฃผ์๋ก ์ค์ ํ๋ค. server_addr.sin_port = htons(PORT); // ์๋ฒ์ ์ฐ๊ฒฐํ๋ค. ์๋๋ ํด๋ณด์. if( connect(server_sock, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)) == -1 ) fprintf(stderr, "์๋ฒ์ connect ํ ์ ์์ต๋๋ค."), exit(1); for( int i = 0 ; i < 3 ; i++ ){ // ์ฐ๊ฒฐํ๊ณ ๋ญ ํด์ผ์ง ๊ทธ๋ฅ ์์๋ค..;; queslen = recv( server_sock, question, sizeof(question), 0); question[queslen] = ''; printf( "I have to answer the next question. %sn", question); if( send(server_sock, msg, sizeof(msg), 0) == -1 ) fprintf(stderr, "send error"); printf( "I sent an answer. The answer is %srn", msg); system("pause"); } WSACleanup(); exit(0); // exit๋ก ์ข ๋ฃ๋ฅผ ํ๋ฉด ๋ชจ๋ ํ์ผ ๋์คํฌ๋ฆฝํฐ๋ฅผ ์๋์ผ๋ก ๋ซ๊ณ ์ข ๋ฃํ๋ค. }
์ ๋ฌธ์ ๋น์ ๋ก ๋ค๋ฉด ์ญํ ์ด ๋ ๊ฐ๋ก ๋๋๋ค. ํ์ชฝ์ ์ ๋ฌธ๋ด์ฉ์ ์ํ๋ ๋๋ก ํธ์งํ๋ ์ ๋ฌธ์ฌ, ํ์ชฝ์ ์ ๋ฌธ ๋ด์ฉ์ ์ ๋ณดํ๋ ์ทจ์ฌ ๊ธฐ์์ด๋ค.
์ฐ๋ฆฌ์ ์ทจ์ฌ ๊ธฐ์๋ ๋๋ฌด๋ ์๋ช ์์์ด ๊ฐํ๊ธฐ ๋๋ฌธ์ ์์ ์ด ์๋ก ์๊ฒ ๋ ์ ๋ณด๋ฅผ ์ฆ๊ฐ ์ ๋ฌธ์ฌ์ ์๋ฆฐ๋ค. ๋ํ ์ด๋ค ์ ๋ฌธ์ฌ ์ชฝ์์ ๊ธฐ์์๊ฒ ์ ๋ณด๊ฐ ํ๋ ธ๋ค๊ณ ์๋ ค์ฃผ๋ฉด, ๊ธฐ์๋ ๋ค๋ฅธ ์ ๋ฌธ์ฌ์๊ฒ๋ ๋ชจ๋ ์๋ก์ด ์ ๋ณด๋ฅผ ์๋ ค์ค๋ค.
~cpp import unittest class Reporter: def __init__(self): self.companies = [] def collectNews(self, aNews): self.news = aNews def addCompany(self, anObserverCompany): self.companies.append( anObserverCompany ) def notify(self): for each in self.companies: each.update() class NewsCompany: def __init__(self, reporter): self.reporter = reporter reporter.addCompany(self) self.news = "" def update(self): self.news = self.reporter.news class SportNewsCompany(NewsCompany): def __init__(self, reporter): NewsCompany.__init__(self,reporter) class EconomyNewsCompany(NewsCompany): def __init__(self, reporter): NewsCompany.__init__(self,reporter) class HanguryeNewsCompany(NewsCompany): def __init__(self, reporter): NewsCompany.__init__(self,reporter) def correctNews(self, aNews): self.reporter.collectNews(aNews) self.reporter.notify() class TestObserverPattern(unittest.TestCase): def testUpdate(self): reporter = Reporter() company = NewsCompany(reporter=reporter) news="He is dead." reporter.collectNews(news) company.update() self.assertEquals( news, company.news ) def testNotify(self): reporter = Reporter() companies = [SportNewsCompany( reporter ), EconomyNewsCompany( reporter )] news="He is dead." reporter.collectNews(news) reporter.notify() for company in companies: self.assertEquals( company.news, reporter.news ) class TestCompany(unittest.TestCase): def testCorrectNews(self): reporter = Reporter() companies = [SportNewsCompany( reporter ), EconomyNewsCompany( reporter )] theCompany = HanguryeNewsCompany(reporter) theCompany.correctNews("He is still alive") self.assertEquals( reporter.news, theCompany.news ) for company in companies: self.assertEquals( company.news, reporter.news ) def xtestTwoRepoter(self): reporter = Reporter() company = BigNewsCompany(reporter) anotherReporter = Reporter() anotherReporter.collectNews( "She.." ) company.hire( anotherReporter ) anotherReporter.notify() self.assertEquals( "She..", company.news ) reporter.collectNews( "I'm different." ) reporter.notify() self.assertEquals( "I'm different", company.news ) if __name__ == "__main__": unittest.main(argv=('','-v'))