더 짧은 버전
Linux의 네트워크 인터페이스가 네트워크 장치 드라이버 대신 실행 중인 프로세스에서 패킷을 보내고 받도록 만드는 방법은 무엇입니까?
확장 버전
학사 학위 논문으로 두 대의 컴퓨터 간 통신을 위해 USRP N210(Ettus에서 만든 소프트웨어 정의 라디오) 두 대 위에 맞춤형 무선 임시 네트워크(802.11이 아니라 IP 스택 사용)를 구축할 계획입니다. 아이디어는 USRP를 사용하여 무선 신호를 보내고 받는 GNURadio 위에 링크 레이어를 구현하는 것입니다.
이상적으로는 전체 커뮤니케이션 시스템이 다음과 같기를 바랍니다.투명한마치 일부 인터페이스(eth0 등)에 연결된 또 다른 네트워크인 것처럼 호스트에 연결됩니다. 그래서 만들 수 있는 방법이 없을지 궁금합니다.네트워크 인터페이스(그림의 virt0)을 Linux에서 실행하고 네트워크 장치 드라이버 대신 GNURadio(Python 및 C++ 사용)와 통신하도록 만듭니다. 이것의 목적은 GNURadio 환경이 전송되어야 하는 패킷에 액세스하고 다른 호스트가 수신할 수 있도록 USRP를 통해 이를 전달할 수 있다는 것입니다(일부 처리 포함). 프로세스 간 통신인데 파이프를 사용할 수 있나요?
이것이 제가 투명성이라고 부르는 것을 달성하려는 나의 첫 번째 아이디어였습니다. 또한 GNURadio와 상호 작용하기 위해 더미 네트워크 드라이버를 작성하는 것도 고려했지만 장치 드라이버에 대한 경험이 부족했기 때문에 이를 피하고 싶었습니다. 다른 아이디어가 있으시면 언제든지 환영합니다.
답변1
다음 명령을 사용하여 일부 프로그램에서 지원하는 패킷을 보내고 받을 수 있는 네트워크 인터페이스를 만들 수 있습니다. (귀하의 경우 프로그램은 어떻게든 GNU Radio에 연결됩니다.)화요일/수도꼭지상호 작용.
Documentation/networking/tuntap.txt
커널 소스 코드 인용 :
TUN/TAP은 사용자 공간 프로그램에 대한 패킷 수신 및 전송을 제공합니다. 물리적 매체에서 패킷을 수신하는 대신 사용자 공간 프로그램에서 패킷을 수신하고 물리적 매체를 통해 패킷을 보내는 대신 사용자에게 기록하는 간단한 지점 간 또는 이더넷 장치로 생각할 수 있습니다. 우주 프로그램.
드라이버를 사용하려면 프로그램이
/dev/net/tun
적절한 ioctl()을 열고 실행하여 네트워크 장치를 커널에 등록해야 합니다. 네트워크 장치는 선택한 옵션에 따라tunXX
표시 됩니다 .tapXX
프로그램이 파일 설명자를 닫으면 네트워크 장치와 해당 경로가 모두 사라집니다.선택한 장치 유형에 따라 사용자 공간 프로그램은 IP 패킷(tun 사용) 또는 이더넷 프레임(tap 사용)을 읽고 써야 합니다. 어느 것이 사용되는지는 ioctl()이 제공하는 플래그에 따라 다릅니다.
패키지는 다음에서 제공됩니다.http://vtun.sourceforge.net/tun튜닝 및 탭 장치를 사용하는 방법에 대한 두 가지 간단한 예가 포함되어 있습니다. 두 프로그램 모두 두 네트워크 인터페이스 사이의 브리지처럼 작동합니다.
br_select.c
- 선택된 시스템 호출을 기반으로 한 브리징.
br_sigio.c
- 비동기식 io 및 SIGIO 신호를 기반으로 한 브리지입니다.그러나 가장 좋은 예는 VTun입니다.http://vtun.sourceforge.net
또한보십시오이것스택오버플로 질문입니다. Google을 사용하면 많은 튜토리얼을 찾을 수 있습니다.