로컬 주소로 일부 데이터를 보낸 다음 특정 인터페이스 ppp0
을 사용하여 외부 주소로 '전달'하려고합니다. 내 문제는 패킷 라우팅/소켓 바인딩 문제와 관련이 있다고 생각하지만 너무 많은 초보자가 그것을 이해할 수 있습니다. 파이썬의 특정 인터페이스에 대한 리눅스 루프백 인터페이스
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 wlan0
0.0.0.0 192.168.1.1 0.0.0.0 UG 303 0 0 wlan0
10.64.64.64 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0
169.254.0.0 0.0.0.0 255.255.0.0 U 304 0 0 wwan0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 wlan0
192.168.1.0 0.0.0.0 255.255.255.0 U 303 0 0 wlan0
:
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
파이썬 측면에서, 나는 단순히를하려고하면 잘 작동 소켓
HOST = ''
PORT_vid = 0
try:
s_vid = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s_vid.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s_vid.setsockopt(socket.SOL_SOCKET, 25, "ppp0")#this works to bind it to ppp0
print("Socket created.")
except socket.error, msg:
print("Failed. Error: " + str(msg))
sys.exit()
try:
s_vid.bind((HOST,PORT_vid))
print("Socket binding complete.")
except socket.error, msg:
print("Bind failed. Error: " + str(msg))
s_vid.close()
sys.exit()
에게 바인딩 외부 주소를 핑 (ping)하십시오. 지금은 내가 그 로컬 포트에서 수신하고 그것을 전달 다음 netcat
#p_nc is taking some data from a local process and sending it to the local point
p_nc = subprocess.Popen(["nc", "-u", "127.0.0.1", str(s_vid.getsockname()[1])],stdin=another_process.stdout)
그리고를 사용하여 주변 지역에 내 데이터를 전송
while 1:
data, addr = s_vid.recvfrom(1024)
print('local reception')
#do stuff here with 'data' - never reached
s_vid.sendto(data_amended,(external_ip,external_port))
(난 그냥
netcat
로를 전송하지 않는 이유 좋은 이유가있다)
데이터는 ppp0
을 통해 외부 주소로 이동해야하며 위의 "외부로 로컬로 연결하는 프로세스"로는 "netcat
처리"를 사용하는 것이 좋습니다. s_vid
소켓은 외부 트래픽을 수신 대기 할 필요가 없으며 간단히 외부 및 수신 대기 지역을 전송합니다.
내 소켓이 ppp0
에 바인딩되어있어 루프백 데이터를 읽을 수 없다고 생각하지만 해결 방법을 모르겠습니다. 파이썬 끝 또는 ip 라우팅 끝의 솔루션이 작동하지만 라우팅 및 인터페이스가 처음입니다.