최근에 나는 tun
내 방법을 통해 인터넷 트래픽을 리디렉션하는 인터페이스를 사용하고 있습니다. 이를 위해 나는 따른다이것지도 시간.
10.0.0.15
내 생각은 인터페이스를 통해 들어오는 IP 패킷을 수신 tun0
하고 이를 리디렉션하여 customSend()
패킷을 다른 컴퓨터로 보내는 프로그램을 갖는 것입니다(다른 프로토콜을 사용하지만 관련이 없음). 다른 컴퓨터는 패킷에 응답하여 패킷을 가져와서 인터페이스 customRecv()
로 보냅니다 .tun0
내 코드 예제는 다음과 같습니다.
void customSend() {
// whenever a packet is sent from my computer to 10.0.0.15 the
// read method will be triggered.
size = read(tunfd, buffer, sizeof(buffer));
// send packet using another protocol
write(otherProtocolSendfd, buffer, size);
}
void customRecv() {
// whenever a packet is received from another protocol
// this will be triggered
size = read(otherProtocolRecvfd, buffer, sizeof(buffer));
// redirect the packet to tun0
write(tunfd, buffer, size);
}
void main() {
// init the tun0 interface
int tunfd = init_tun_interface();
// create a thread running customSend and one running customRecv
}
이해를 돕기 위해 예를 보여드리겠습니다.
- 워크스테이션 1(
10.0.0.14
) ping 워크스테이션 2(10.0.0.15
) - ping 애플리케이션은 ICMP 패킷을 생성하여
tun0
. read
메소드는customSend()
ICMP 패킷을 가로챕니다.customSend()
다른 프로토콜 메소드로 전송하여 스레드합니다otherProtocolSendfd
.- 다른 프로토콜이 네트워크를 통해 메시지를 보내고 ping 패킷이 Workstation2에 도착합니다.
- Workstation2는 탁구 메시지로 응답합니다.
- 또 다른 프로토콜은 네트워크 메시지를 수신하여 다음과 같이 씁니다.
otherProtocolRecvfd
read
메소드는customRecv()
응답 패킷을 수신하고 이write
메소드는 이를tun0
인터페이스로 보냅니다.tun0
인터페이스는 ping 애플리케이션에 응답(퐁) 패킷을 제공합니다.
이제 해당 부분을 구현했으므로 customSend()
실제로 작동하고 메시지를 다른 컴퓨터로 전송합니다.
제가 신경쓰는 부분은 글쓰기 부분이에요. 메시지가 write
실제로 tunfd
인터페이스로 전송됩니까, 아니면 메서드에서 메시지가 수신됩니까 ? customSend()
이것이 제가 기대하는 것입니다. 후자인 경우 인터페이스에 메시지를 어떻게 보내나요?
또한 이것은 보다 일반적인 질문입니다. 하나의 스레드가 실행되고 customToSend()
다른 스레드가 실행되는 경우 customRecv()
둘 다 를 사용하므로 동시성 문제가 발생합니까 tunfd
?
감사해요!