script für datentransfer

Backup, Restore und Transfer von Daten
Post Reply
cumsh0t
Posts: 8
Joined: 2009-01-14 18:30
 

script für datentransfer

Post by cumsh0t »

Hallo,

Ich brauche ein script welches pakete von einem bestimmten port in textfiles schreibt. (perl oder shell wäre schön)

Ich habe schon ein script, dieses funktioniert aber nicht richtig, will heißen, es lässt nur 50% der anfragen auch durch.

Danke
Roger Wilco
Posts: 5923
Joined: 2004-05-23 12:53
 

Re: script für datentransfer

Post by Roger Wilco »

Du suchst netcat (oder eines seiner Derivate wie nc6 oder socat).
cumsh0t
Posts: 8
Joined: 2009-01-14 18:30
 

Re: script für datentransfer

Post by cumsh0t »

netcat benutze ich im moment, nur geht es nicht richtig.
User avatar
daemotron
Administrator
Administrator
Posts: 2641
Joined: 2004-01-21 17:44
Contact:
 

Re: script für datentransfer

Post by daemotron »

Definiere "geht nicht richtig" - vielleicht lässt sich dazu dann mehr sagen.

Alternativen zu nc & Co: Du könntest den (x)inetd einspannen, der nur ein einfaches Protokoll-Skript ansteuert.

Wenn's anspruchsvoller werden soll, kannst Du das auch mit ein paar Zeilen Python-Code erledigen (davon ausgehend, dass es als Daemon laufen soll):

Code: Select all

#!/usr/bin/env python

import SocketServer

class MyHandler(SocketServer.BaseRequestHandler):

    def handle(self):
        buff_size = 128
        while True:
            buff = self.request.recv(buff_size)
            if buff:
                fobj = open("ausgabe.txt", "ab")
                fobj.write(buff)
                fobj.close()
            else:
                break

server = SocketServer.ThreadingTCPServer(("", 50000), MyHandler) 
server.serve_forever()
Den Port (hier im Beispiel 50000 auf allen Interfaces) und die Buffer Size müsstest Du natürlich noch an Deine Bedürfnisse anpassen; oder ggf. auf Byte-weises einlesen per Schleife bis zu einem Terminatorzeichen umstellen (hängt vom tatsächlichen Einsatzzweck ab).
Last edited by daemotron on 2009-01-16 13:32, edited 1 time in total.
cumsh0t
Posts: 8
Joined: 2009-01-14 18:30
 

Re: script für datentransfer

Post by cumsh0t »

Das Problem is, das netcat aus irgend einem Grund nur etwa 50% der anfragen auch durchlässt und in die txt schreibt.

Ich hab das auf einem vserver liegen.
User avatar
daemotron
Administrator
Administrator
Posts: 2641
Joined: 2004-01-21 17:44
Contact:
 

Re: script für datentransfer

Post by daemotron »

Wie rufst Du denn netcat auf? Nutzt Du die -o <Datei> Option?

Um noch mal ganz sicher zu gehen, dass ich richtig verstanden habe, was Du vorhast: Du möchtest auf einem bestimmten Port eingehenden Traffic (TCP oder UDP?) abgreifen und in eine Datei speichern. Der Port wird von keinem anderen Dienst genutzt, so dass Du netcat mit der Option -l verwenden kannst... richtig?
User avatar
daemotron
Administrator
Administrator
Posts: 2641
Joined: 2004-01-21 17:44
Contact:
 

Re: script für datentransfer

Post by daemotron »

matzewe01 wrote:Ich würde es z.B. mit Perl machen und einen eigen dienst aufsetzen.
Genau das tut mein kleines Python-Skript oben doch :wink:
User avatar
daemotron
Administrator
Administrator
Posts: 2641
Joined: 2004-01-21 17:44
Contact:
 

Re: script für datentransfer

Post by daemotron »

Da geht's mir mit Perl ähnlich... ich versteh immer hinterher die Programme nicht, die ich damit geschieben habe 8)
Ich könnte jetzt noch ne Implementierung in C anbieten, aber die wird 'n bissl länger :D
cumsh0t
Posts: 8
Joined: 2009-01-14 18:30
 

Re: script für datentransfer

Post by cumsh0t »

Hi,

netcat habe ich bisher so benutzt:
while :; do nc -l -p 2009 >> /home/xxx/123.txt; done

Das Pythonscript kann ich irgendwie leider nicht ausführen. Ich bekomme keine Berechtigung, dann benutzt ich chmod u+x file, anschließend ./scriptname, aber dann kommt Datei oder Verzeichnis konnte nicht gefunden werden.

Bitte um Hilfe :-)
freddy36
Posts: 273
Joined: 2008-03-20 17:31
 

Re: script für datentransfer

Post by freddy36 »

cumsh0t wrote:netcat habe ich bisher so benutzt:
while :; do nc -l -p 2009 >> /home/xxx/123.txt; done
So kann immer nur eine Verbindung zurzeit laufen.

Lass es über (x)inetd laufen.
cumsh0t
Posts: 8
Joined: 2009-01-14 18:30
 

Re: script für datentransfer

Post by cumsh0t »

Erm, hab xinetd nun installiert. Weiss aber nicht welche Parameter ich brauche bzw. welche Settings ich in der Configfile haben muss. Hat jemand da evtl was?
User avatar
daemotron
Administrator
Administrator
Posts: 2641
Joined: 2004-01-21 17:44
Contact:
 

Re: script für datentransfer

Post by daemotron »

cumsh0t wrote:Das Pythonscript kann ich irgendwie leider nicht ausführen. Ich bekomme keine Berechtigung, dann benutzt ich chmod u+x file, anschließend ./scriptname, aber dann kommt Datei oder Verzeichnis konnte nicht gefunden werden.

Bitte um Hilfe :-)
Klingt, als ob gar kein Python-Interpreter installiert wäre...
cumsh0t
Posts: 8
Joined: 2009-01-14 18:30
 

Re: script für datentransfer

Post by cumsh0t »

Hi,
rufe ich das Pythonscript mit "python script.py" auf, bekomme ich folgende Fehlermeldung:

Code: Select all

Traceback (most recent call last):
  File "socket.py", line 3, in <module>
    import SocketServer
  File "/usr/lib/python2.5/SocketServer.py", line 132, in <module>
    import socket
  File "/home/sro/socket.py", line 5, in <module>
    class MyHandler(SocketServer.BaseRequestHandler):
AttributeError: 'module' object has no attribute 'BaseRequestHandler'
Was kann ich dagegeben tun? Google gibt nichts wirklich brauchbares aus.
User avatar
daemotron
Administrator
Administrator
Posts: 2641
Joined: 2004-01-21 17:44
Contact:
 

Re: script für datentransfer

Post by daemotron »

Bitte prüfe noch mal, ob Du das Skript korrekt wie oben angegeben übernommen hast (insbesondere auf die Einrückungen achten, die sind bei Python wichtig!). Falls das Skript korrekt ist, hast Du ein Problem mit Deinem Python-Interpreter. In dem Fall bitte mal die Interpreter-Shell aufrufen:

Code: Select all

$ python
>>> import SocketServer
>>> class MyHandler(SocketServer.BaseRequestHandler):
...   def handle(self):
...     pass
...
Interpreter mit Ctrl+D beenden. Die Eingaben oben sollten ohne Fehler akzeptiert werden. Falls nicht, bitte Python über Deinen Paketmanager noch mal neu installieren (ich wette aber ein virtuelles Bier auf einen Tipp-/Kopierfehler im Skript)
cumsh0t
Posts: 8
Joined: 2009-01-14 18:30
 

Re: script für datentransfer

Post by cumsh0t »

jfreund wrote:Bitte prüfe noch mal, ob Du das Skript korrekt wie oben angegeben übernommen hast (insbesondere auf die Einrückungen achten, die sind bei Python wichtig!). Falls das Skript korrekt ist, hast Du ein Problem mit Deinem Python-Interpreter. In dem Fall bitte mal die Interpreter-Shell aufrufen:

Code: Select all

$ python
>>> import SocketServer
>>> class MyHandler(SocketServer.BaseRequestHandler):
...   def handle(self):
...     pass
...
Interpreter mit Ctrl+D beenden. Die Eingaben oben sollten ohne Fehler akzeptiert werden. Falls nicht, bitte Python über Deinen Paketmanager noch mal neu installieren (ich wette aber ein virtuelles Bier auf einen Tipp-/Kopierfehler im Skript)
Hallo !,
die Eingaben werden problemlos akzeptiert. Habe auch das Script eindeutig richtig kopiert. Funktioniert jedoch leider nicht. Was könnte ich noch machen?
User avatar
daemotron
Administrator
Administrator
Posts: 2641
Joined: 2004-01-21 17:44
Contact:
 

Re: script für datentransfer

Post by daemotron »

Tja, das kann nicht sein. Du hast in den Interpreter genau das eingegeben, worüber er im Skript angeblich stolpert => das schließt sich gegenseitig aus. Ich kann Deinen Fehler hier jedenfalls nicht reproduzieren (weder mit Python 2.5 noch mit 2.6, getestet mit Linux (SUSE), FreeBSD und Windows).
cumsh0t
Posts: 8
Joined: 2009-01-14 18:30
 

Re: script für datentransfer

Post by cumsh0t »

Hallo ;).
Oh man. Hatte nun Python 2.5.1 und 2.6 auf SuSE probiert und ging nicht. Habe Debian draufgemacht und 2.6 getestet, ging nicht. Die File hieß "socket.py", was wohl der Grund war, da bei Python selbst schon so eine file existiert. Habs umbenannt, jetzt kommt kein Fehler mehr. Leider kommt aber auch nichts an, bzw. wird nichts gespeichert. Wo wird das denn hingespeichert, ins selbe Verzeichnis wie die .py File?

//Edit: Ah, mein TestScript war diesmal fehlerhaft ;). Jetzt funktionierts optimal. Dankeschön alle zusammen :D
User avatar
daemotron
Administrator
Administrator
Posts: 2641
Joined: 2004-01-21 17:44
Contact:
 

Re: script für datentransfer

Post by daemotron »

So, weil ich jetzt selber auch ein Tool benötigte, mit dem ich den eingehenden Traffic aus mehreren parallelen TCP-Verbindungen in eine Datei dumpen kann, hab ich mich jetzt mal rangesetzt und das ganze "ordentlich" implementiert, also steuerbar über Kommandozeilenargumente und als v. a. als Daemon. Mehrere parallele Verbindungen werden über Threads geregelt; damit es beim Schreiben des Dumpfile keine Deadlocks gibt, wurde die Schreibarbeit zentralisiert.

Das ganze ist Open Source und natürlich öffentlich zugänglich: http://root-tools.svn.sourceforge.net/v ... g/wiretap/
Die README sollte man sich vielleicht vor der ersten Benutzung zu Gemüte führen; wer es ganz eilig hat, kann auch das Python-Skript (wiretap.py) einfach mit der Option '-h' aufrufen - sollte eigentlich selbsterklärend sein.

Bugreports, Kritik, Anregungen, Wünsche gerne entweder per PM oder über den SourceForge-Tracker
Post Reply