2016-06-01 13 views
0

Ich möchte in der Lage sein, Daten von stdin zu lesen und die Daten nach 0x45 zu scannen, was der Anfang meines IP-Headers ist. Aber ich kann nicht verstehen, wie ich den Start des IP-Headers identifizieren konnte! Mein Versuch ist wie folgt, und ich glaube das Problem in ist, wie ich die Daten lesen und dass entweder die binären Daten müssen konvertiert werden oder mein Wert für den Bedarf eines convertion zu überprüfen:Lokalisieren von IP v4 Paketen in binären Daten von stdin

while True: 
    for data in sys.stdin.read(): 
     if(data==0x45): 
      #do somethin with the data... 
+1

Können Sie Post ein Beispiel Ihre Eingangsdaten (von stdin) vergleichen sollte, bitte? – salomonderossi

+0

Hier ist ein xxd Dump eines Schnipsel aus dem binären Stream: "... 080045b952ddacee ...." Wo ich die 0x45 – StianL

+0

'0x45' suchen möchte, ist das Zeichen' E', Sie könnten eine Tonne falsch bekommen Positives. –

Antwort

0

Es scheint, Sie vergleichen Hex mit Dezimalzahl. Sie suchen nach 45 Ich denke und vergleiche mit 0x45.

>> print(0x45) 
69 

Also das richtige Teil finden Sie mit so etwas wie dieses

for line in sys.stdin: 
    if "45" in line: 
     # do something with found data in line 
+0

Das wäre, weil XXD konvertiert die Daten von Binär zu HEX in um es "lesbar" zu machen. Die Daten sind ursprünglich binär, und damit Ihre Lösung funktionieren würde, müsste ich sie zB durch HEX in HEX konvertieren. es zuerst durch XXD leiten, was unerwünscht ist ... – StianL