2011년 3월 26일 토요일

Using Wireshark on Mac OS X

link: http://bar4mi.tistory.com/41

wireshark에서 packet를 잡아주려면
뭔가 권한 설정이 필요한가 보다.
readme manual에 안 나와있길래 찾아보니 금방 나오네.


$ sudo -i
# ls -dl /dev/bpf*
crw-------  1 root  wheel   23,   0  3 26 22:16 /dev/bpf0
crw-------  1 root  wheel   23,   1  3 26 22:16 /dev/bpf1
crw-------  1 root  wheel   23,   2  3 27  2011 /dev/bpf2
crw-------  1 root  wheel   23,   3  3 27  2011 /dev/bpf3
# chgrp admin /dev/bpf*
crw-------  1 root  admin   23,   0  3 26 22:16 /dev/bpf0
crw-------  1 root  admin   23,   1  3 26 22:16 /dev/bpf1
crw-------  1 root  admin   23,   2  3 27  2011 /dev/bpf2
crw-------  1 root  admin   23,   3  3 27  2011 /dev/bpf3
# chmod g+rw /dev/bpf*
crw-rw----  1 root  admin   23,   0  3 26 22:16 /dev/bpf0
crw-rw----  1 root  admin   23,   1  3 26 22:16 /dev/bpf1
crw-rw----  1 root  admin   23,   2  3 27  2011 /dev/bpf2
crw-rw----  1 root  admin   23,   3  3 27  2011 /dev/bpf3

2011년 3월 25일 금요일

바쁘다 바뻐...

6전공의 압박이란 게 새삼 느껴진다.
그래도 덜 놀게 되고, 더 재미를 느끼고 있으니
그것만으로도 참 신기하다.

복학 후 수업을 들으며 EKU 과제물 제출란에 숙제를 하나하나 쌓아가면서
[미제출]란이 [제출]란으로 바뀌는 모습이 얼마나 보람되었던지.
내가 이렇게 열심히 공부하고 있다니.. 하면서
그런 내 모습이 어색하기만 했던 그때가 벌써 1년이나 지났다.

취업도 살짝 걱정되고,
아직 전공도 할줄 아는게 많이 없고,
농구도 더 잘하고 싶지만
현재의 내 모습에 만족하고 감사할 줄도 알아야겠지.

그냥...
매번 전공 내용만 적다가 내 삶의 분위기를 좀 남겨보고자
이렇게 머리 속에 있는 생각을 꺼내본다.

2011년 3월 24일 목요일

Embeding Perl in C program (Win32, Visual C++)

link: http://www.codeguru.com/Cpp/misc/misc/interfacingtootherlanguages/article.php/c3811

필요한 파일(3)
1. interp.c
2. perlxsi.c
3. perl.lib    (perl5.12의 경우, perl512.lib)

1. project에 interp.c라는 파일 생성 후 다음을 입력해주고 저장
----------------------------------------------------------------------------
#include <EXTERN.h>
#include <perl.h>

static PerlInterpreter *my_perl;
int main(int argc, char **argv, char **env)
{
 PERL_SYS_INIT3(&argc, &argv, &env);
 my_perl = perl_alloc();
 perl_construct(my_perl);
 perl_parse(my_perl, NULL, argc, argv, NULL);
 PL_exit_flags |= PERL_EXIT_DESTRUCT_END;

 //Running Perl Actually
 perl_run(my_perl);

 perl_destruct(my_perl);
 perl_free(my_perl);
 PERL_SYS_TERM();
}
----------------------------------------------------------------------------


2. perlxsi.c 파일은,
    윈도우 cmd창에서 다음을 입력해주고
    현재 폴더에 생성되면 프로젝트 폴더에 추가

perl -MExtUtils::Embed -e xsinit
(을 입력하면 현재 위치에 perlxsi.c 파일을 생성해준다.)


 3. perl(win32)을 설치하면 보통 다음 디렉토리에 perl.lib이 위치함
    라이브러리 디렉토리를 추가해주고 추가종속성에도 입력한다.
    (속성변경 하는 김에 헤더파일의 디렉토리도 추가해준다.)

C:\Perl\lib\CORE\

컴파일 시 표준 include directory 지정하는 방법

link: http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/C/Documents/CprogramingForLinuxEnv/Ch12_module
source code에서
#include " "        <= 이건 소스 코드가 있는 폴더에서 찾는 것이라는 건 알았는데
#include < >        <= 이건 잘 몰랐다.

Standard Include Directory 라고 불리는 곳에서
헤더파일을 찾는 것이라는 걸 이제야 알았네..

그리고 또 한가지, 터미널에서 컴파일 시에 옵션을 주어
Include Directory를 지정해줄 수 있는데 다음과 같다.

$cc -L(지정하고싶은 디렉토리)
(예시)
$cc -L/usr/local/lib -o interp interp.c        //붙여쓰는 것에 조심!

perl.h 와 EXTERN.h 는 어디있는가?

(in Mac OS X)
/System/Library/Perl/5.10.0/darwin-thread-multi-2level/CORE/perl.h
/System/Library/Perl/5.10.0/darwin-thread-multi-2level/CORE/EXTERN.h

펄 코드 임베딩 한번 하기 엄청 힘드네...
언제쯤 테스트 한번 해볼 수 있을까?

------------------------------------------------
앗.. -_-
이렇게 찾는 방법이 있었군...

Execute this statement for a hint about where to find CORE:

$perl -MConfig -e 'print $Config{archlib}'

Embedding Perl under Win32

link: http://search.cpan.org/~rjbs/perl-5.12.3/pod/perlembed.pod#Embedding_Perl_under_Win32

AI를 들으며 꼭 한번 해보고 싶은 것.
이참에 공부한 펄을 한번 써봐야지.
썩히긴 아깝잖아..

2011년 3월 23일 수요일

SYN flooding

link: http://isecure-public.blogspot.com/2009/07/syn-flooding.html

TCP의 3-way handshaking을 이용한 공격방법
방어책으로는 timeout 시간을 줄이거나 SYN cookie를 이용하는 방법이 있단다.

(예전에 시스템소프트웨어 시간에 keep-alive packet에 관한 숙제가 있었는데,
 이런 공격에 대한 방어책이었나보다..)

3-way handshaking이 필요한 이유 (TCP 연결방식)

link: http://4network.tistory.com/entry/TCP-3-way-Handshaking%EC%9D%80-%EC%99%9C-%ED%95%84%EC%9A%94%ED%95%9C%EA%B0%80

구글링을 하면서 TCP가 3단계를 거쳐 연결을 만드는 건 알았는데
왜 이런 SYN 패킷을 이용한 연결이 필요한 것인지를 몰랐다.
여기서 쉬운 예를 가지고 설명하는 것 같아 이해가 된다.

프록시 (proxy)

link(프록시서버):
http://ko.wikipedia.org/wiki/%ED%94%84%EB%A1%9D%EC%8B%9C_%EC%84%9C%EB%B2%84
link2(공개프록시): http://ko.wikipedia.org/wiki/%EA%B3%B5%EA%B0%9C_%ED%94%84%EB%A1%9D%EC%8B%9C

프록시 서버라는 것은 '다리' 역할을 하는 매개체이다.
예를 들면,
Client_A ----- Client_B ----- Client_C 이고
A와 C는 직접 연결되어 있지 않다고 할때,
A가 C에 접속할 수 있게 해주는 중계 기능을 하는 B를 말하는 것이다.

또한, 공개 프록시는 아무나 자유롭게 접속하여 사용가능한 프록시 서버를 말하는데,
위의 예에서 B가 공개 프록시라 할 때 A가 B를 사용해 C로 접속하면
C는 A가 아닌 B의 IP주소를 인식하기 때문에 주소 숨김이 가능하다고 한다.
그래서 해킹에 주로 쓰인다고 하는데...
딱히 원래 A주소를 알아낼 방법이 없는 건 아닌 것 같은데 어떻게 하는진 잘..

터널링 (tunneling)

link: http://ask.nate.com/qna/view.html?n=3104446

간단하게 말해서 shared medium을 이용하는 네트워크에서
암호화를 통해 마치 peer to peer처럼 보이게 한다는 건가보다.


[링크 내용]
VPN에서 나오는 말인 것 같은데요. 맞나요?
네트워크망은 두가지로 나누어 본다면, 사설망과(Private Network) 공용망(Public Network)으로 나눌 수 있습니다.
사설망을 전용선이라고 하고요.
이런한 전용선은 통신을 할려고 하는 두 지점에서 선을 깔았다고 보시면 됩니다.
그러린간 전용 도로죠. 두 곳에서 만 사용 할 수 있는
따라서 그 전용선에서 흐르는 데이터는 다른 사람이 물리적 개입이 없이는 접근할 수 없습니다. 따라서 보안이 좋죠. 하지만 모두 전용망을 사용한다면 비용이 많이 드는 것이 단점입니다. n(n-1)/2 만큼 전용선을 깔아야 하닌깐.
따라서 비용이 적게 드는 방법으로 한 망을 서로가 공유하는 방식이 있습니다.
그것이 public 망이죠 기본적으로 public망에 흐르는 데이터는 누가 보내고 받을 사람이 누구인지가 들어 있죠. 그래서 주소가 필요하고 이러한 주소중에 한가지가 IP주소죠. 다른 주소도 많이 있는데 그것은 주제와 많이 벗어나고요.
그래서 받는 주소가 내 주소가 같은 데이터만 받아 들여서 보면 한망을 공유해서 여러 시스템이 사용할 수 있겠죠. 하지만 흐르는 데이터를 다 들여다 볼 수 있죠. 주소가 네 것이 아니더라도 고의로 볼려고 하면 물리적인 개입없이 들여다 볼 수 있는 단점이 있습니다. 보안에 취약한 거죠.
이 두가지 방식을 장점을 다 사용하기 위해서, 혹은 공용망에서 전용망 처럼 가상으로 사용하기 위해서 암호화 기술을 사용을 합니다.
데이터를 보낼때 대상이 아닌 다른 곳에서 봐도 모르게 암호화를 해서 데이터를 보내고 받는 사람은 암호화됀 테이터를 풀어서 보고...
이런식으로 하는 작업을 터널링(터널을 뚫다)이라고 합니다.
그러닌깐 가상으로 다른 곳에서는 접근을 못하게 한다고 해서 이것을 터널링이라고 하죠.

예를 들자면 은말한 장소에서 대화를 나눌 수 없을 때 서로가 암호를 사용해서 대화를 나눈다면 다른 사람은 들어도 무슨 뜻인지 모르고 둘만 안다면, 은밀한 장소에서 대화를 나누는 효과를 낼 수 있죠. 이렇게 되면 둘만의 대화 통로(터널)이 생기죠.
이것이 터널링입니다.

DDoS와 Zombie PC

이 요약은 사용할 수 없습니다. 이 글을 보려면 여기를 클릭하세요.

2011년 3월 21일 월요일

Mac OS X 타임머신 동작원리

link: http://forest.nubimaru.com/entry/how-macosx-leopard-time-machine-works

비록 완벽히 의미가 이해된 것은 아니지만
하드 링크와 소프트 링크에 대해 새로 알게 되었다.

하드 링크는 파일을 실제로 변경할 수 있는 레퍼런스같은 것이고
소프트 링크는 바로가기와 같이 실제 파일을 건드릴 수는 없는 거란다.

맥 오에스의 타임머신은 이 하드 링크를 이용하는데,
한 시간마다 백업을 실행하는 과정에서
변경없이 단지 복사된 파일A에 대해서는 하드 링크만을 생성하고
파일A가 변경되어 파일A'이 되었으면 파일 A를 실제로 복사한 후 A'로 변경한다.
그리고 그 이후 A'가 다시 복사되면 A'의 하드링크를 생성할 것이다.
(물론 파일 내용이 변경되면 A'을 복사,변경한 A''을 만들테지만.)

결론적으로 변경이 없으면 하드링크만 생기고 파일의 복사는 없다.
그리고 변경이 있으면 파일이 실제로 복사된다.
이런 방식으로 저장할 용량을 최소화시키는 것이긴 하지만
파일의 변경이 빈번히 일어난다면 저장공간을 감당하지 못할 것이다.

어쨌든간에 이런 방식의 복사로 인해
타임머신을 설정한 시점 이후의 어느 시점이든
내가 원하는 시점으로 내 디스크를 돌려놓을 수 있다는 것이다.
별 아이디어가 아닌 것 같으면서도 신기하다.