指定したホスト、ポートに udpパケットを送信する perl スクリプト sendUdpData.pl を作成した。テストなどで、パケットキャプチャで取得したデータ(16進ダンプ文字列)を、好きな場所に送りたい場合に使う用途で作成した。
使い方は以下。
送信データ(16進ダンプ文字列)はファイルから与えることもできる。
何も引数を指定しないと、以下を実行する。
「74 65 73 74」は「test」の16進ダンプ文字列である。
sendUdpData.pl
use strict; use warnings; use Socket; use Getopt::Long 'GetOptions'; my $destHost = 'localhost'; my $destPort = 162; my $sendData; my $sendDataFile; GetOptions( 'host=s' => \$destHost, 'port=i' => \$destPort, 'data=s' => \$sendData, 'file=s' => \$sendDataFile ); if (!$sendData) { if ($sendDataFile and (-f $sendDataFile)) { $sendData = getDataFromFile($sendDataFile); } else { $sendData = '74 65 73 74'; # test } } if (length($sendData) == 0) { die("No data to send..."); } $sendData =~ s/\s//g; my $packedSendData = pack("H*", $sendData); socket(my $socket, PF_INET, SOCK_DGRAM, 0) or die "Failed to create socket. $!"; my $addrBin = inet_aton($destHost); my $sockAddr = pack_sockaddr_in($destPort, $addrBin); send($socket, $packedSendData, 0, $sockAddr) or die "Failed to send. $!"; sub getDataFromFile { my $sendDataFile = shift; my $sendData; open(my $fh, $sendDataFile) or die "Failed to open $sendDataFile. $!"; while (my $line = <$fh>) { chomp($line); $sendData .= $line; } return $sendData; }