Try this maybe...
Tested Code:
Code:
#!/usr/bin/perl
use strict;
use warnings;
use IO::Socket;
my $query_address = "192.168.0.2";
my $query_port = 10011;
my $login = "serveradmin";
my $pass = "*********";
my $sid = 1;
my $sock = IO::Socket::INET->new(
PeerAddr => $query_address,
PeerPort => $query_port,
Proto => 'TCP',
Autoflush => 1,
Blocking => 1,
) or die "Server Failed to Start : [email protected]";
# Login to TS3
print $sock "login $login $pass\n";
print $sock "use sid=$sid\n";
# Ask for clientlist
print $sock "clientlist\n";
# Wait for server/query to receive above socket data
sleep(1);
# Receive clientlist from socket response
my ($data);
$sock->recv($data,4096);
# Not sure if your program continues but just in case...
close($sock);
if ( $data =~ /error id=([^0?]\d+)/ ) {
# Error Handler...?
print "Error Fetching Clientlist\n";
}
else {
# Array to hold users online
my @users = $data =~ /client_nickname=(.+?) /gi;
# Output Array With Users Online
print join(', ',@users)."\n";
}