2012-08-12 5 views
1

개념 증명과 편리한 편집 도구로 IRC 채널에 연결하는 OpenBSD LKM을 작성하고 연결 된 syscall이 실행될 때보고합니다.네트워크 기능을 호출하는 OpenBSD 커널 모듈

이것은 오프 사이트이지만 인터넷 액세스가있을 때 파일 시스템 변경, 사용자 로그온 등의 '라이브'업데이트를 기본적으로 가질 수 있습니다.

소켓을 연결하는 데까지 닿았으나, getaddrinfo 또는 심지어 inet_addr 하드 코딩 된 주소로 전화를 수행하려고 시도했습니다.

이들은 사용자 지정 기능이므로 사용하려고 시도하면 정의되지 않은 참조가됩니다. 문제는, 인터넷 검색 및 grep'ing 오픈 BSD 소스의 잠시 후, 나는 이것을 할 수있는 동등한 커널 기능을 찾을 수 없습니다; 가장 좋은 권장 사항은 모듈에서 다시 구현하는 것입니다.

이것은 또한 islower, isxdigitisspace과 같은 항목을 구현해야한다는 것을 의미합니다. 누구나 이것에 대한 대안이나 대안을 알고 있습니까? 아니면 인터넷 파일에서 c + p 코드를 붙잡습니까?

+1

커널 모듈이 서버와 직접 통신하는 대신 로컬 통신 채널 (예 : 파이프 또는 로컬 소켓)을 열어서 사용자 영역 응용 프로그램에서 실제 서버 통신을하도록하십시오. –

+0

왜 커널이 DNS 검색을 수행해야합니까? 그리고 왜 당신은 실행중인 syscalls에 관심이있을 정도로 편집증 적이겠습니까? 그렇지만 DNS 시스템이 스푸핑되지 않을 정도로 충분히 신뢰하고 있습니까? – tbert

+0

필자는 모듈이 가지고있는 종속성의 양을 최소화하고 싶었습니다. (독립형의 관점까지) - 검증 후에도 커널에서 사용자 영역의 데이터를 사용하는 것에 대한 불신이 있습니다. 그러나 사용자 영역 통신이이 작업을 수행하기 위해 선호되고 권장되는 방법이라는 점에서 당신은 옳습니다. – septical

답변

1

이것은 확실히 사용자 공간에서 더 잘 수행됩니다. 그럼에도 불구하고 OpenBSD는 더 이상 커널 모듈을 지원하지 않습니다.

이 프로젝트에서 더 이상 작업하지 않습니다. 이 문제를 해결할 수 있도록 대답하고 싶었고 커널에서 일부 stdlib 함수를 사용하는 방법을 명확히 할 수있었습니다. 이에 대응

: 이것은 또한 islower와, isxdigit 및 isspace와 같은 것들 (내가 진행으로 아마 다른 사람) 그렇게 간단한 일을 수행하기가 훨씬 조금 얻는다 구현해야 의미

; 누구나 이것에 대한 대안이나 대안을 알고 있습니까? 아니면 인터넷 파일에서 c + p 코드를 붙잡습니까?

일부 C stdlib 함수는 libkern에서 사용할 수 있습니다 (libkern(9) 참조). islower()과 같은 많은 ctype 함수를 포함한 다른 것들은 libsa에서 구할 수 있습니다. 이것들을 사용하려면, 당신은 같은 것을 필요

#include <lib/libkern/libkern.h> 
#include <lib/libsa/stand.h> 

libsa이 (/usr/src/sys/lib/libsa/에 있음) 헤더의 소수를 포함을, 그래서 당신이 필요로하는 각 하나를 포함한다.