mirror of https://github.com/secdev/scapy.git
107 lines
2.8 KiB
Plaintext
107 lines
2.8 KiB
Plaintext
% Regression tests for Scapy Answering Machines
|
|
|
|
# More informations at http://www.secdev.org/projects/UTscapy/
|
|
|
|
|
|
############
|
|
############
|
|
+ Answering Machines
|
|
|
|
= Generic answering machine mocker
|
|
import mock
|
|
@mock.patch("scapy.ansmachine.sniff")
|
|
def test_am(cls_name, packet_query, check_reply, mock_sniff, **kargs):
|
|
def sniff(*args,**kargs):
|
|
kargs["prn"](packet_query)
|
|
mock_sniff.side_effect = sniff
|
|
am = cls_name(**kargs)
|
|
am.send_reply = check_reply
|
|
am()
|
|
|
|
|
|
= BOOT_am
|
|
def check_BOOTP_am_reply(packet):
|
|
assert(BOOTP in packet and packet[BOOTP].op == 2)
|
|
assert(packet[BOOTP].yiaddr == "192.168.1.128" and packet[BOOTP].giaddr == "192.168.1.1")
|
|
|
|
test_am(BOOTP_am,
|
|
IP()/UDP()/BOOTP(op=1),
|
|
check_BOOTP_am_reply)
|
|
|
|
|
|
= DHCP_am
|
|
def check_DHCP_am_reply(packet):
|
|
assert(DHCP in packet and len(packet[DHCP].options))
|
|
assert(("domain", "localnet") in packet[DHCP].options)
|
|
|
|
test_am(DHCP_am,
|
|
IP()/UDP()/BOOTP(op=1)/DHCP(),
|
|
check_DHCP_am_reply)
|
|
|
|
|
|
= ARP_am
|
|
def check_ARP_am_reply(packet):
|
|
assert(ARP in packet and packet[ARP].psrc == "10.28.7.1")
|
|
assert(packet[ARP].hwsrc == "00:01:02:03:04:05")
|
|
|
|
test_am(ARP_am,
|
|
Ether()/ARP(pdst="10.28.7.1"),
|
|
check_ARP_am_reply,
|
|
IP_addr="10.28.7.1",
|
|
ARP_addr="00:01:02:03:04:05")
|
|
|
|
|
|
= DNS_am
|
|
def check_DNS_am_reply(packet):
|
|
assert(DNS in packet and packet[DNS].ancount == 1)
|
|
assert(packet[DNS].an.rdata == "192.168.1.1")
|
|
|
|
test_am(DNS_am,
|
|
IP()/UDP()/DNS(qd=DNSQR(qname="www.secdev.org")),
|
|
check_DNS_am_reply)
|
|
|
|
= DHCPv6_am - Basic Instantiaion
|
|
~ osx netaccess
|
|
a = DHCPv6_am()
|
|
a.usage()
|
|
|
|
a.parse_options(dns="2001:500::1035", domain="localdomain, local", duid=None,
|
|
iface=conf.iface6, advpref=255, sntpservers=None,
|
|
sipdomains=None, sipservers=None,
|
|
nisdomain=None, nisservers=None,
|
|
nispdomain=None, nispservers=None,
|
|
bcmcsdomains=None, bcmcsservers=None,
|
|
debug=1)
|
|
|
|
= DHCPv6_am - SOLICIT
|
|
~ osx netaccess
|
|
req = IPv6(dst="::1")/UDP()/DHCP6(msgtype=1)/DHCP6OptClientId(duid=DUID_LLT())
|
|
assert a.is_request(req)
|
|
res = a.make_reply(req)
|
|
assert not a.is_request(res)
|
|
assert res[DHCP6_Advertise]
|
|
assert res[DHCP6OptPref].prefval == 255
|
|
assert res[DHCP6OptReconfAccept]
|
|
a.print_reply(req, res)
|
|
|
|
= DHCPv6_am - INFO-REQUEST
|
|
~ osx netaccess
|
|
req = IPv6(dst="::1")/UDP()/DHCP6(msgtype=11)/DHCP6OptClientId(duid=DUID_LLT())
|
|
assert a.is_request(req)
|
|
res = a.make_reply(req)
|
|
assert not a.is_request(res)
|
|
assert res[DHCP6_Reply]
|
|
assert "local" in res[DHCP6OptDNSDomains].dnsdomains
|
|
a.print_reply(req, res)
|
|
|
|
= DHCPv6_am - REQUEST
|
|
~ osx netaccess
|
|
req = IPv6(dst="::1")/UDP()/DHCP6(msgtype=3)/DHCP6OptClientId(duid=DUID_LLT())/DHCP6OptServerId(duid=a.duid)
|
|
assert a.is_request(req)
|
|
res = a.make_reply(req)
|
|
assert not a.is_request(res)
|
|
assert res[UDP].dport == 546
|
|
assert res[DHCP6_Solicit]
|
|
a.print_reply(req, res)
|
|
|