2017-10-08 8 views
2

그래서 파이썬에서 터널링 프로토콜을 만들려고합니다. 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 시에라

답변

0

나는 무차별 모드로 TUN 인터페이스를 둘 것입니다.

는 다음 SO 게시물에 제시하는 방법에 대한

좋은 시작 :

Python Sockets: Enabling Promiscuous Mode in Linux

다른 옵션은 작성된 네트워크 인터페이스에 낮은 수준의 액세스 또는 가상 네트워크 카드 드라이버 것 파이썬.

+0

무차별 모드는 갈 길이 멀지 않습니다. 내 tun0 인터페이스는 지점 간 설정이며, 내 질문을 다시 한번 살펴 봅니다. 세부 정보를 추가했습니다. –

+0

왜 안 되니? 무차별 모드의 소켓과 s.readfrom()을 사용하면 패킷을 받고 누구로부터 왔는지 알 수 있습니다. 당신은 두 명의 스니퍼, 하나는 TCP와 하나의 잡기 UDP를 잡아야하지만, 그것은 무엇이 중요합니다. 효율성을 높이기 위해 asyncore를 사용할 수도 있습니다. 그렇지만 낮은 수준을 선택했습니다. 수동으로 패킷 헤더를 읽는 방법을 알아야합니다. 즉, TCP 및 UDP 사양과 추가 장치 프로토콜이 필요합니다. 그런 다음 struct 모듈을 사용하여 메타 데이터와 컨텐츠를 추출하십시오. 하지만 먼저 OpenVPN이 어떻게 트릭을하는지 보도록 권합니다. 구조체 사용을위한 – Dalen

+0

thenewboston에는 그것에 대한 아주 좋은 안내서가 있습니다. 구조체 버전이 작동하지 않으면 promisc 모드를 사용합니다. 감사합니다 :-) –