그래서 파이썬에서 터널링 프로토콜을 만들려고합니다. tun 인터페이스 설정을 통해 모든 트래픽을 라우팅했습니다. 하지만 이제 프로그램에서 tun 인터페이스로 리디렉션되는 패킷을 암호화하여 서버로 보내려면 어떻게해야합니까? 내가 본 것은 socket.bind() 또는 socket.setsockopt() 함수 중 하나입니다. 이 내가 지금 사용하는 내 인터페이스 설정파이썬 네트워크 인터페이스에서 패킷 읽기 및 처리
그리고 코드 이것이다 :이 장치에 직접 읽
import os, sys
from select import select
f = os.open("/dev/tun0", os.O_RDWR)
os.system("ifconfig tun0 add 10.6.0.1 10.6.0.2")
os.system("ip route add 0/1 dev tun0")
try:
while 1:
r = select([f],[],[])[0][0]
if r == f:
packet = os.read(f, 4000)
print(str(len(packet)) + " : " + str(packet))
except KeyboardInterrupt:
print ("Stopped by user.")
os.system("ip route delete 0/1 dev tun0")
. 그래서 개별적으로 패킷을 읽기 위해 소켓 라이브러리를 사용하는 방법이 있습니까?
감사합니다.
OS : 나는 통과하는 모든 패킷을 수신 할 수 있도록 맥 OS 시에라
무차별 모드는 갈 길이 멀지 않습니다. 내 tun0 인터페이스는 지점 간 설정이며, 내 질문을 다시 한번 살펴 봅니다. 세부 정보를 추가했습니다. –
왜 안 되니? 무차별 모드의 소켓과 s.readfrom()을 사용하면 패킷을 받고 누구로부터 왔는지 알 수 있습니다. 당신은 두 명의 스니퍼, 하나는 TCP와 하나의 잡기 UDP를 잡아야하지만, 그것은 무엇이 중요합니다. 효율성을 높이기 위해 asyncore를 사용할 수도 있습니다. 그렇지만 낮은 수준을 선택했습니다. 수동으로 패킷 헤더를 읽는 방법을 알아야합니다. 즉, TCP 및 UDP 사양과 추가 장치 프로토콜이 필요합니다. 그런 다음 struct 모듈을 사용하여 메타 데이터와 컨텐츠를 추출하십시오. 하지만 먼저 OpenVPN이 어떻게 트릭을하는지 보도록 권합니다. 구조체 사용을위한 – Dalen
thenewboston에는 그것에 대한 아주 좋은 안내서가 있습니다. 구조체 버전이 작동하지 않으면 promisc 모드를 사용합니다. 감사합니다 :-) –