ioctl를 이용한 프로그래밍.
글쓴이: deux9745 / 작성시간: 수, 2003/07/30 - 1:49오후
ioctl를 이용해 라우팅 테이블을 수정하려고 하는데
ioctl 관련 정보를 얻을 수 있는 곳을 알고 계시면 알려주세요.
여기 게시판에서 ioctl로 검색해보면 Advanced Programming in the UNIX Environment
를 보면 좋다고 나와 있는데 봐도 몇장되지 않고 예제도 별로 없어서 감을 잡을 수가 없습니다.
제가 하려는 것은 ioctl를 이용해 라우팅 테이블을 수정하는 정도 입니다.
만약 유사한 샘플코드가 있으면 올려주시면 감사하겠습니다.
그럼.
Forums:
Advanced Programming in the UNIX Environ
Advanced Programming in the UNIX Environment보다는 아마
스티븐슨 아저씨의 UNIX Network Programming Volume1 이 좀 더
많은 정보를 제공해 줄 것입니다.
그리고, 구글 가셔서 검색창에서 "ioctl" 혹은 "route" 로 검색해 보면
ioctl에서 route에 대한 인자값에 대한 정보가 꾀 많은 나올 것 입니다.
또 한가지가 더 있다면, route 소스를 보고 수정하는것도 방법이고요.
route 명령어는 net-tools안에 포함되어 있습니다.
좀 더 간결한 소스를 원하시면 busybox에서 route 부분을 보시면 됩니다.
비 온 뒤에 땅이 굳어진다는 말은 다 거짓말이다.
감사합니다.
busybox에 있는 route 소스가 휠씬 보기 쉽군요.
지금 거의 수정해서 테스트까지 완료했습니다.
근데 궁금한게 있는데
system("route del 192.168.30.10");
을 하는 것 보단 ioctl을 사용을 사용해 라우팅 테이블을 수정하는것이
어느정도 빠른지 알고 싶습니다. 대략적으로나마..
system()
system() 이 권장되지 않는 이유는
system() 콜 수행시 새로운 프로세스가 뜨기 때문이죠..
아시겠지만, system() 이 호출되면,
실제적으로는 fork() - exec() 과정을 거치게 되기 때문입니다.
그 외에 보안적인 측면의 이유도 있는듯 싶은데..
그쪽은 자세한 것은 모르겠습니다..
Re: system()
system()은 shell을 하나 띄우고, 그 쉘이 fork()-exec()해서 해당 프로세스를
실행시킵니다. 이때, sh이 뜬 순간에 노이즈를(또는 버그등) 주면 이 프로그램을 사용하는
사람에게 쉘 프롬프트가 떨어질 수 있습니다.
만일 클라이언트가 bbs클라이언트 같은 경우에는 쉘을 얻었을테니 무섭지요.
또하나는, system()에서 실행시킨 프로그램을 바꿔치기(backdoor)해서
이상한 기능을 수행하도록 바꿔버리면 아프지요.
------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.
댓글 달기