2012-08-23 11 views
0

ScapyDummynet을 우회합니까 (일반적으로 IPFW)?Scapy가 Dummynet을 우회합니까?

정말 그렇게 보입니다. 나는 나가는 패킷과 들어오는 패킷 각각에 큰 추가 지연을 추가하고 있으며, Scapy와 함께 전송 된 패킷은 물론 모든 것이 느려집니다.

$ ipfw add pipe 1 from any to any 
$ ipfw pipe 1 config delay 500ms 
$ ping www.google.com 
PING www.l.google.com (173.194.34.18) 56(84) bytes of data. 
64 bytes from par03s02-in-f18.1e100.net (173.194.34.18): icmp_req=1 ttl=54 time=1011 ms 
64 bytes from par03s02-in-f18.1e100.net (173.194.34.18): icmp_req=2 ttl=54 time=1010 ms 

그럼 괜찮아 보입니다. 그러나 Scapy로 패킷을 보내면 다음과 같이 처리됩니다.

>>> from scapy.all import * 
>>> p = IP(dst="www.google.com", ttl=1)/TCP(sport=222, dport=2999) 
>>> ans,unans = sr(p*3) 
>>> ans[0][1].time - ans[0][0].sent_time 
0.0002701282501220703 #usual value for such RTT 

dummynet을 통과 시키려면 어떤 방법이 있습니까?

EDIT 내가 처분 할 수있는 다른 기계가 있다면 인터넷에 들어가기 전에 dummynet을 사용하고 모든 트래픽을 지시 할 수 있습니다. 그래도 모든 것을 로컬로 처리하는 것을 선호합니다. Scapy의

답변

1

저자는 Scapy의 메일 링리스트 나에게 대답

는이 질문에 대한 같은 해결 방법을 시도해보십시오 : http://trac.secdev.org/scapy/wiki/FAQ#Icantping127.0.0.1.Scapydoesnotworkwith127.0.0.1orontheloopbackinterface

그것은 일 (원시 소켓을 사용)! 위의 링크의 단락은 다음과 같습니다.

127.0.0.1을 핑할 수 없습니다. Scapy가 127.0.0.1 또는 루프백 인터페이스에서 작동하지 않습니다.

루프백 인터페이스는 매우 특별한 인터페이스입니다. 패킷을 통해 가는 패킷은 실제로 조립 및 분해되지 않습니다. 커널 은 패킷을 목적지로 라우팅하지만 내부 구조는 여전히 입니다. tcpdump -i lo를 보는 것은 에 가짜 일 뿐이며 모든 것이 정상이라고 생각하게 만듭니다. 커널은 Scapy가 그의 뒤에서하고있는 것을 모르고 있기 때문에 루프백 인터페이스에서 볼 수있는 것은 가짜입니다. 이것은 로컬 구조에서 온 것이 아닙니다. 따라서 커널은 절대로이를 수신하지 못합니다.

:

로컬 응용 프로그램에 말을하기 위해, 당신은 PF_INET를 사용하여, 한 층 위 당신의 패킷을 구축하는 대신 PF_PACKET/SOCK_RAW (또는 Linux가 아닌 다른 시스템에서 이에 상응하는)의/SOCK_RAW 소켓이 필요합니다

>>> conf.L3socket 
<class __main__.L3PacketSocket at 0xb7bdf5fc> 
>>> conf.L3socket=L3RawSocket 
>>> sr1(IP(dst="127.0.0.1")/ICMP()) 
<IP version=4L ihl=5L tos=0x0 len=28 id=40953 flags= frag=0L ttl=64 proto=ICMP chksum=0xdce5 src=127.0.0.1 dst=127.0.0.1 options='' |<ICMP type=echo-reply code=0 chksum=0xffff id=0x0 seq=0x0 |>>