Вот кусочек кода
.
.
.
my $socket = IO::Socket::INET -> new (
PeerAddr => '192.168.250.1',
LocalPort => 9996,
Proto =>'udp'
) or die "$!\n";
my $port = $socket -> peerport();
my $host = $socket -> peerhost();
my $host2 = $socket -> sockhost();
my $port2 = $socket -> sockport();
print "port = '$port' host = '$host' port2
= '$port2' host2 = '$host2' \n";
while (1)
{
my $from = $socket -> recv (my $data, 8192, 0);
if (length ($data) < 16) {
warn ("Invalid packet length " . length ($data) .
" received\n");
next;
}
my ($version, $flows, $uptime, $secs, $usecs) = unpack ('nnNNN', $data);
print "*************************************************\n";
#my $len = length ($data);
print("version = '$version'\n");
print("flows = '$flows'\n");
print("uptime = '$uptime'\n");
print("secs = '$secs'\n");
print("usecs = '$usecs'\n");
print "*************************************************\n";
}
.
.
.
Есть Cisco 1700 - адрес 192.168.250.1
Порт данных 9996
Хочется читать данные
Для этого создаю сокет
Обратите внимание на то, как создаётся
сокет!!!
Я указываю PeerAddr И LocalPort(!)
И это работает, но я не понимаю как!
Ведь я просто создаю клиента и должен действовать по схеме
socket
connect
recv|send
На кой указывать LocalPort???
Если указать PeerPort 9996 - не работает!
В чём моя ошибка?
Да это коллектор.
Логика работы очень простая
Инициалицация
Демонизация
В бесконечном цикле
Читаем в буфер из сокета
Сбрасываем буфер в файл
Я не совсем понимаю почему коллектор - это
сервер по отношению к Cisco.
Он естественно может быть сервером, если
написать клиентов для получения например
статистики от него.
Но от cisco он просто забирает данные!
Грубо говоря, кошак экспортирует флоус на указанный в конфиге хост и порт, там, естественно, должен крутится твой коллектор и читать посылаемые данные.
И почему бы тебе в сторону flow-tools не посмотреть? Там и коллектор готовый, и парсер/экспортер/etc.