2013-10-23 5 views
0

파이썬 스크립트에서 패킷을 보내야합니다. 목적지 IP 주소가 있습니다. 내가 필요 :
- 일반적으로 기본 경로입니다 송신 인터페이스 이름
(내가 응답 스니핑 위해 필요) - 해당 인터페이스의 IP 주소를

python : 출구 인터페이스를 확인하는 방법

어떻게 수 (나는 내 ​​응용 프로그램의 페이로드를 사용할 필요) 나는 파이썬에서 그것을합니까?

감사합니다,

+0

나는 scapy에서 conf.route를 알고 있지만, 어떤 코드를 사용해야하는지 알아 내려면 많은 코드가 필요합니다. 나는 이미 거기에있는 코드를 재사용하기를 희망한다. – user2913139

+0

LOL egress - non-native 영어 사용자가 결코 google을 사용하지 않을 단어 중 하나입니다. – Bohdan

답변

1

Pynetinfo이 가장 좋은 것 같다. 이것은 내 컴퓨터의 작은 샘플입니다. 결과는 다를 수 있지만 물론 기본 게이트웨이가 있습니다. IP 패킷 내 리눅스 시스템에서 지정된 대상과 사용하는 것이 인터페이스를 얻기 위해 해당 인터페이스의 IP 주소를 얻기에 관해서는

>>> import netinfo 
>>> netinfo.get_routes() 
({'dest': '0.0.0.0', 'netmask': '0.0.0.0', 'gateway': '192.168.0.1', 'dev': 'wlan1'}, 
{'dest': '169.254.0.0', 'netmask': '255.255.0.0', 'gateway': '0.0.0.0', 'dev': 'wlan1'}, 
{'dest': '192.168.0.0', 'netmask': '255.255.255.0', 'gateway': '0.0.0.0', 'dev': 'wlan1'}) 
>>> default_gateway = 
...[route for route in netinfo.get_routes() if route['dest'] == '0.0.0.0'][0] 
>>> default_gateway['gateway'] 
'192.168.0.1' 
>>> default_gateway['dev'] 
'wlan1' 

...

>>> import netifaces 
>>> netifaces.ifaddresses(default_gateway['dev'])[netifaces.AF_INET] 
[{'broadcast': '192.168.0.255', 'netmask': '255.255.255.0', 'addr': '192.168.0.9'}] 

. 나는 다른 길은 모르겠다.

>>> dst = "127.0.0.1" 
>>> p = subprocess.Popen(["ip", "route", "get", dst], stdout=subprocess.PIPE) 
>>> p.stdout.read() 
'local 127.0.0.1 dev lo src 127.0.0.1 \n cache <local> \n' 
+0

감사합니다. 모양이 좋지만 라우팅 테이블에 많은 항목이 있습니다 (많은 인터페이스와 동적 라우팅 때문에). 기본 경로가 항상 선택되지는 않습니다. 경로 검색을 수행하여 올바른 라우팅 항목/인터페이스를 쉽게 선택할 수있는 방법을 알고 계십니까? (대상 IP를 알고, 가장/가장 일치하는 항목을 찾아야합니다.) – user2913139

+0

두 개의 코드 섹션이 추가되었습니다. 당신이 무슨 생각을하는지 제게 알려주세요. – RyPeck

+0

RyPeck - 당신은 내 사람입니다 :) 고마워요. 내 모든 문제를 해결합니다. :) – user2913139

관련 문제