AutoIt (TCP/IP) - Netcat in Autoit?

  • Hallo zusammen,

    ich habe vor, ein Tool als Ncat Ersatz zu schreiben, mit dem ich in der Lage bin auf eine Linux Maschine an IP:Port etwas zu schreiben. Auf der Linux maschine läuft der xinetd der ein Skript ausführt, dass auf Stdout schreibt und im AutoIt Tool ausgelesen werden soll.

    Nun stehe ich vor einigen Fragen. Kann ich das nicht mit TCP/IP machen? An IP:Port verbinden und gleichzeitig Listen, senden, und gleichzeitig empfangen ... ich weiß nicht, wie die Stdout von der Linux maschine auf die Windows Maschine kommen soll ... ? Sendet der xinetd die Daten automatisch auf dem Port zurück, oder holt sich netcat die Informationen?

    Eine alternative Variante wäre die cmd-befehle mit netcat absetzen und die cmd stdout zu lesen. Ich würde es jedoch bevorzugen, sowas in AutoIt selbst zu bauen ohne Netcat nutzen zu müssen, und AutoIt als direkte Schnittestellensoftware zwischen den Rechnern zu nutzen.

    #Edit: Ich nehme an, der xinetd schreibt einfach auf stdout, was bei aktiver Verbindung vll. bedeutet die daten werden übertragen, aber woher kenne ich dann den port auf dem das zurück kommt? Weil das wird ja sicherlich ein anderer sein?

    Grüße Yaerox

    Grüne Hölle

    Einmal editiert, zuletzt von Yaerox (21. November 2014 um 15:31)

  • Hallo ^^
    Ich habe schon mehrfach mit TCP gearbeitet, das einzigste was mich an deinem Post etwas irritiert ist das Linux-Script. Mit Linux & Co kenne ich mich überhaupt nicht aus, aber wieso sollte das Linux-Script - wenn dein 'Client' verbunden ist - die 'Daten' NUR auf der Console ausgeben??? Hast du das Script selber verfasst, dann mußt du es wahrscheinlich anpassen (Rückgabe zusätzlich auf TCP...).

    Aber mit AutoIt mache ich das so, ich verbinde mich erst zu TCP:IP und kann bei belieben Senden und Empfangen. Windows Cacht evtl. verpasste Daten und dieser wird erst ausgeöscht wenn due diesen ausließt ;)

    [autoit]

    TCPStartup()
    $hSocket = TCPConnect($s_TCP_IP, $i_TCP_Port)
    Do
    TCPSend($hSocket, "Irgendwas") ; An Socket senden
    Sleep(20)
    $sTcpData = TCPRecv($hSocket) ; Aus Socket lesen
    if $sTcpData <> "" then ConsoleWrite($sTcpData & @CRLF)
    Until @error
    TCPShutdown()

    [/autoit]

    ...Sorry, wollt noch nicht absenden ^^

    Du mußt natürlich die Variablen anpassen, und dann kannst du das Script ja mal auf deiner Config anpassen und testen.
    Solltest du keine Daten auslesen können, mußt du eben noch das Linux-Sript anpassen.

    Grüsse!

  • Mit netcat funktioniert es so wie es ist. Nun will ich mit AutoIt das netcat ersetzen. Also an dem shell-Skript kann es ja nicht liegen. Bei dem Skript von dir verbindet er, aber es kommt dort nichts zurück. Entweder weil für zurück ein anderer Port genutzt wird, oder ... ich weiss es nicht :D

    Installiere mir grad mal n tool zum mitschneiden des traffics und werd mir das mal anschauen.

    Grüße Yaerox

    Grüne Hölle

  • Viel Erfolg ;)
    Aber es wundert mich schon, das du unterschiedliche Ports oder so verwenden sollst - Finde das schon ungewöhnlich.
    Ich tippe auf einem Konfigurationsfehler auf Linux Seite.

    Grüsse!

    [Edit]
    Bekommst du überhaupt keine Daten mit TcpRead? Vielleicht erhällst du ja nur ein einzelnes Paket welches eine Art Token ethällt... Sachen wie $iPort + 1 hasst du aich schon sicherlich probiert, gibt die Hilfe für den Linux-Server nicht darüber Infos aus?

    Einmal editiert, zuletzt von Techmix (21. November 2014 um 16:24)

  • Viel Erfolg ;)
    Aber es wundert mich schon, das du unterschiedliche Ports oder so verwenden sollst - Finde das schon ungewöhnlich.
    Ich tippe auf einem Konfigurationsfehler auf Linux Seite.


    Das ist ausgeschlossen. Es funktioniert ja bereits mit anderem Tool als Client. Eig. wäre nur die Frage wie netcat arbeitet, und ob man das so mit autoit nachbauen kann. Es scheint, als ob netcat und xinetd Source und Dest Ports tauschen. netcat (Port X) -> xinetd (Port Y) und auf dem Rückweg ist es xinetd (Port X) -> netcat (Port Y),

    Grüsse![Edit]Bekommst du überhaupt keine Daten mit TcpRead? Vielleicht erhällst du ja nur ein einzelnes Paket welches eine Art Token ethällt... Sachen wie $iPort + 1 hasst du aich schon sicherlich probiert, gibt die Hilfe für den Linux-Server nicht darüber Infos aus?

    Nein bin ich drann ;) TcpRecv ist leer, wenn ich das mit +1 mache schreibt er immer +1 ... BinaryToString ist ebenfalls leer ...
    Kann ich in AutoIt feststellen auf welchem TCP Port ich etwas gesendet habe oder mit dem nächsen TCPSend senden werde?

    Grüße Yaerox

    Grüne Hölle

    Einmal editiert, zuletzt von Yaerox (21. November 2014 um 16:37)

  • Du meintest

    Zitat

    Auf der Linux maschine läuft der xinetd der ein Skript ausführt, dass auf Stdout schreibt...


    Hast du Zugriff auf das Script? Hab Gegoogelt und hab einen interessanten Thread gefunden, in dem es um das Thema Bash und TCP geht http://forum.ubuntuusers.de/topic/socket-t…programmierung/ letzter Post, ich hoffe du kennst den noch nicht ^^

    Vielleicht kannst du ja dein Linux-Script so anpassen das die Ausgabe nicht an die Console sondern über einen TCP Client gesendet wird.
    So könntest du dich auch direkt mit dem Linux-Script verbinden und brauchst in AU3 auch nur die eine Standartverbindung zum Senden und empfangen. Oder du verbindest dich mit einem Socket auf dem Server und kannst so Steuerbefehle senden, und einen zweiten Socket der sich mit dem Script verbindet und die Daten wieder ausließt.

    Grüsse!

  • Du meintest


    Hast du Zugriff auf das Script? Hab Gegoogelt und hab einen interessanten Thread gefunden, in dem es um das Thema Bash und TCP geht http://forum.ubuntuusers.de/topic/socket-t…programmierung/ letzter Post, ich hoffe du kennst den noch nicht ^^

    Vielleicht kannst du ja dein Linux-Script so anpassen das die Ausgabe nicht an die Console sondern über einen TCP Client gesendet wird.
    So könntest du dich auch direkt mit dem Linux-Script verbinden und brauchst in AU3 auch nur die eine Standartverbindung zum Senden und empfangen. Oder du verbindest dich mit einem Socket auf dem Server und kannst so Steuerbefehle senden, und einen zweiten Socket der sich mit dem Script verbindet und die Daten wieder ausließt.

    Grüsse!

    Wie meist hab ich am Wochenende keinen Zugriff auf das ganze Gerümpel, werd mir das gleich direkt anschauen :)

    Danke

    Grüße Yaerox

    Grüne Hölle