2016-05-05 22 views
0

Ich möchte die ntp_monlist Antwort meines NTP-Servers erhalten.
Eigentlich ist das Paket gesendet, aber ich bekomme nichts.
Jemand kann mir sagen, warum?Scapy NTP Anfrage

Code:

#!/usr/bin/env python 

from scapy.all import * 
import threading 
import os 
import sys 
import socket 

#Data to send 
ntpip = "xxx.xx.xxx.xx" 

packet = IP(dst=ntpip)/UDP(dport=123)/Raw(load=str("\x17\x00\x03\x2a")+ str("\x00")*4) 
packet.show() 
rep,non_rep = srp(packet) 
rep.show() 

Reponse:

###[ IP ]### 
    version = 4 
    ihl  = None 
    tos  = 0x0 
    len  = None 
    id  = 1 
    flags  = 
    frag  = 0 
    ttl  = 64 
    proto  = udp 
    chksum = None 
    src  = xxx.xxx.xxx.xxx 
    dst  = xxx.xxx.xxx.xxx 
    \options \ 
###[ UDP ]### 
    sport  = domain 
    dport  = ntp 
    len  = None 
    chksum = None 
###[ Raw ]### 
     load  = '\x17\x00\x03*\x00\x00\x00\x00' 
Begin emission: 
Finished to send 1 packets. 
...................................................................................................................... 
Received XXX packets, got 0 answers, remaining 1 packets 

Wie Sie sehen können, ich erhalte nie eine Antwort.

Antwort

4

Sie haben mehrere Probleme:

  • Sie eine Schicht-3-Paket zu senden, so müssen Sie sr verwenden, nicht srp;
  • müssen Sie einen UDP-Quellport angeben;
  • Ihre NTP-Nutzlast ist fehlerhaft.

Es gibt zwei Probleme mit Ihrer NTP-Nutzlast. Zunächst einmal ist das erste Wort des NTP-Paket wie folgt definiert (RFC 5905):

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|LI | VN |Mode | Stratum  |  Poll  | Precision | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 

Sie LI 0 sein wollen, VN 3 und Modus auf 3 zu sein, so gibt dies ein erster Oktett von 0 + (3 * 8) + 3 oder 0x1b.

Zweitens ist das minimale NTP-Paket 12 * 4 Oktetts.

Sie müssen also sagen:

packet = IP(dst=ntpip)/UDP(dport=123,sport=50000)/("\x1b\x00\x00\x00"+"\x00"*11*4) 
rep,non_rep = sr(packet) 
+0

Danken für Ihre Antwort, können Sie mir bitte sagen, wie das Ergebnis des ntp_monlist zeigen? Wenn ich rep.show() verwende, habe ich nicht das gewünschte Ergebnis. – Pixel

+0

Sie möchten wahrscheinlich 'sr1' anstelle von' sr' verwenden. Wenn Sie 'sr' verwenden, benötigen Sie etwas wie' für (snd, rcv) in rep: rcv.show() '. – jch

+0

Die Antwort lautet "load = '\ x1c \ x03 \ x00 \ xf2 \ x00 \ x00 \ x07 \ x07 \ x00 \ x00 \ r7D^\ x9c \ x11 \ xda \ xd6 \ xe93 \ xb8 \ xd9 \ x06w \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ xda \ xd6 \ xe9 \ x94 "Rk; \ xda \ xd6 \ xe9 \ x94X \ xfa; \ xf1 '" Wie kann ich es deutlich haben? Danke – Pixel