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'))









