Debian TCP Socket

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
xanacas
Beiträge: 17
Registriert: 10.12.2012 12:06:07

Debian TCP Socket

Beitrag von xanacas » 14.08.2014 22:42:25

Hallo Leute,

ich möchte mich gern ein wenig an TCP Sockets üben, allerdings fehlt mir der passende Ansatz ..

Folgendes soll das Programm machen:

  1. einen TCP Port auf dem Server öffnen
  2. auf einen Befehl warten und diesen dann auf dem lokalen System ausführen
  3. die Ausgabe zurücksenden

Natürlich werdet ihr jetzt sagen "aber das ist doch überhaupt nicht sicher", keine Angst - die Sicherheit wird später implementiert, zudem läuft das System auch nur im internen Netzwerk, bei dem ich der einzige User bin.

Den Befehl würde ich gern über eine PHP Seite an den TCP Socket schicken - ist das möglich?

Welche Programmiersprache wäre dafür denkbar? Am liebsten wären mir Debian Bordmittel (Perl, Python, Bash, ..)

Mit freundlichen Grüßen

Xanacas

Benutzeravatar
Hosi
Beiträge: 226
Registriert: 17.03.2003 15:17:29

Re: Debian TCP Socket

Beitrag von Hosi » 14.08.2014 23:43:05

Code: Alles auswählen

#!/usr/bin/perl 

use IO::Socket::INET;
 
# auto-flush on socket
$| = 1;
 
# creating a listening socket
my $socket = new IO::Socket::INET (
    LocalHost => '0.0.0.0',
    LocalPort => '7777',
    Proto => 'tcp',
    Listen => 5,
    Reuse => 1
);
die "cannot create socket $!\n" unless $socket;
print "server waiting for client connection on port 7777\n";
 
while(1)
{
    # waiting for a new client connection
    my $client_socket = $socket->accept();
 
    # get information about a newly connected client
    my $client_address = $client_socket->peerhost();
    my $client_port = $client_socket->peerport();
    print "connection from $client_address:$client_port\n";
 
    # read up to 1024 characters from the connected client
    my $data = "";
    $client_socket->recv($data, 1024);
    print "received data: $data\n";
 
    open(EXEC, "$data |") || die $!;
    while(<EXEC>)  {
        # write response data to the connected client
        $client_socket->send($_);
    }
    close(EXEC);

    # notify client that response has been sent
    shutdown($client_socket, 1);
}
 
$socket->close();
Aber wenn Du du das so als root irgendwo laufen lassen willst, dann gib doch bitte kurz Bescheid. IP-Adresse reicht... :roll:

Antworten