본문 바로가기

2010/089

libnet 라이브러리 libnet 레퍼런스 libnet 라이브러리는 응용 프로그램이 패킷을 생성하여 보낼 수 있게 해주는 라이브러리로, 직접 패킷을 생성하는 것보다 훨씬 간단하게 패킷을 생성하여 보낼 수 있으며, 보통 Libpcap과 함께 쓰인다. 이 두라이브러리를 이용하면 ping과 traceroute 같은 프로그램을 쉽게 작성할 수 있다고 한다. libnet이 지원하는 함수 메모리의 패킷 관리 함수, 주소 확인 함수, 패킷 구조 생성 함수, 패킷 생성함수등이 있다. libnet이 지원하는 프로토콜로는 2계층은 ARP와 이더넷 , 3계층은 ICMP,IGMP, IPv4, 4계층은 TCP, UDP, 7계층은 RIP, OSPF,DNS 이 있다. ☆ Memory Alllocation and Initialization libnet을.. 2010. 8. 20.
스레드 리눅스에서 프로세스들은 서로 협동할 수 있으며, 메시지를 주고 받을 수 있고, 한 프로세스가 다른 프로세스를 가로챌 수 있다. 더 나아가서 프로세스들이 동일한 메모리 영역을 공유하는 것도 가능하다. 그렇긴 하지만, 운영체제 안에서 프로세스들은 본질적으로 각자 개별적인 개체들이다. 그렇기 떄문에 프로세스들이 변수를 공유하게 만들기는 쉽지 않다. 여러 UNIX와 리눅스 시스템들에서 사용할 수 있는 프로세스 보다 작은 실행 단위로 스레드 라는 것이 있다. 스레드를 프로그래밍하는게 쉬운 일은 아니지만, 응용 분야에 따라서는 스레드가 대단히 유용하다.(이를테면 다중 스레드 데이터베이스 서버 등). 리눅스에서(그리고 일반적으로 유닉스에서 )다중 스레드 프로그래밍이 다중 프로세스 프로그래밍만큼 많이 쓰이지는 않는다... 2010. 8. 17.
입출력 재지정 표준 입력에서 자료를 읽어 적절히 변환한 결과를 표준 출력으로 내보내는 형태의 프로그램을 흔히 필터(filter)라고 부른다. - 입력된 문자들을 모두 대문자로 변화해서 출력하는 간단한예 - upper.c #include #include #include int main() { int ch; while((ch = getchar()) != EOF) { putchar(toupper(ch)); } exit(0); } ---------------------------------------------- 여기서 putchar 함수는 소문자면 대문자로 바꿔 리턴하며 아닌경우 그대로 둔다. 위 예제를 셸의 입 출력 재지정 기능을 이용해서 파일을 대문자로 변환하는 것도 물론 가능하다. $ cat file.txt $ ./u.. 2010. 8. 17.
좀비 프로세스 fork를 이용한 프로세스 생성은 매우 유용하나, 프로그램이 자식 프로세스들을 세심하게 관리해야 한다는 책임이 따른다 자식 프로세스가 종료된다고 해도 부모와의 관계는 부모가 정상적으로 종료되거나 부모가 wait을 호출할 떄까지 유지된다. 즉, 자식 프로세스가 종료되어도 그 즉시 프로세스 테이블에서 자식 프로세스의 해당 항목이 삭제되는 것은 아니다. 자식 프로세스가 더 이상 실행되지 않는다고 해도 부모가 wait를 통해서 자식 프로세스의 종료 코드를 요청할 수 있기 때문에 운영체제는 자식 프로세스를 여전히 시스템 안에 남겨둔다. 실행이 종료되었으나 부모와의 연관 관계가 남아 있는 프로세스를 가리켜 소멸된 프로세스 또는 좀비 프로세스라고 부른다....부모한테 버림받은.자식.. 자식 프로세스가 부모보다 먼저 .. 2010. 8. 17.