#
# Copyright (C) 2011, 2012, 2016 Internet Systems Consortium, Inc. ("ISC")
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
# $Id: packet.pl,v 1.2 2011/04/15 01:02:08 each Exp $
# This is a tool for sending an arbitrary packet via UDP or TCP to an
# arbitrary address and port. The packet is specified in a file or on
# the standard input, in the form of a series of bytes in hexidecimal.
# Whitespace is ignored, as is anything following a '#' symbol.
#
# For example, the following input would generate normal query for
#
# # QID:
# 0c d8
# # header:
# 01 00 00 01 00 00 00 00 00 00
# # qname isc.org:
# 03 69 73 63 03 6f 72 67 00
# # qtype NS:
# 00 02
# # qclass IN:
# 00 01
#
# Note that we do not wait for a response for the server. This is simply
# a way of injecting arbitrary packets to test server resposnes.
#
# Usage: packet.pl [-a <address>] [-p <port>] [-t (udp|tcp)] [filename]
#
# If not specified, address defaults to 127.0.0.1, port to 53, protocol
# to udp, and file to stdin.
#
# XXX: Doesn't support IPv6 yet
require 5.006.001;
use strict;
sub usage {
print ("Usage: packet.pl [-a address] [-p port] [-t (tcp|udp)] [file]\n");
exit 1;
}
my %options={};
my $addr = "127.0.0.1";
my $port = 53;
my $proto = "udp";
my $file = "STDIN";
if (@ARGV >= 1) {
$file = "FH";
}
my $input = "";
chomp $line;
$line =~ s/#.*$//;
}
$input =~ s/\s+//g;
print ("sending: $output\n");
my $bytes;
if ($proto eq "udp") {
} else {
}
print ("sent $bytes bytes to $addr:$port\n");
$sock->close;
close $file;