2013-09-04 27 views
12

Jeśli generuję ramkę Ethernet bez ładunków górnych warstw i wysyłam ją na drugą warstwę za pomocą sendp(), wówczas otrzymam ostrzeżenie i ramkę wprowadzoną do połączenia używa ff: ff: ff: ff: ff: ff as docelowy adres MAC. Dlaczego tak jest? Czy nie powinienem wysyłać dokładnie tej ramki, którą skonstruowałem?Opis procedury "Nie znaleziono adresu Mac, aby osiągnąć cel nie jest używany." ostrzeżenie

Mój pakiet spreparowany można zobaczyć poniżej:

>>> ls(x) 
dst  : DestMACField   = '01:00:0c:cc:cc:cc' (None) 
src  : SourceMACField  = '00:11:22:33:44:55' (None) 
type  : XShortEnumField  = 0    (0) 
>>> sendp(x, iface="eth0") 
WARNING: Mac address to reach destination not found. Using broadcast. 
. 
Sent 1 packets. 
>>> 
+0

nie mogę odtworzyć tego. Czy możesz opublikować linię, której użyłeś do utworzenia pakietu, swojej wersji scapy i platformy, z której korzystasz? – nmichaels

Odpowiedz

8

Większość ludzi napotykają ten problem są nieprawidłowo wykorzystujące send() (lub sr(), sr1(), srloop()) zamiast sendp() (lub srp(), srp1(), srploop()). Dla zapisu, funkcje "bez-p" działają jak send() dla wysyłania pakietów warstwy 3 (send(IP())), podczas gdy warianty "z-p" są przeznaczone do wysyłania pakietów warstwy 2 (sendp(Ether()/IP())).

Jeśli zdefiniujemy x jak ja poniżej i używać sendp() (i nie send()) i nadal masz ten problem, powinieneś spróbować z najnowszej wersji z repozytorium git projektu (patrz https://github.com/secdev/scapy).

Próbowałem:

>>> x = Ether(src='01:00:0c:cc:cc:cc', dst='00:11:22:33:44:55') 
>>> ls(x) 
dst  : DestMACField   = '00:11:22:33:44:55' (None) 
src  : SourceMACField  = '01:00:0c:cc:cc:cc' (None) 
type  : XShortEnumField  = 0    (0) 
>>> sendp(x, iface='eth0') 
. 
Sent 1 packets. 

Jednocześnie biegałam tcpdump:

# tcpdump -eni eth0 ether host 00:11:22:33:44:55 
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode 
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes 
12:33:47.774570 01:00:0c:cc:cc:cc > 00:11:22:33:44:55, 802.3, length 14: [|llc]