Scapy NTP 请求

Scapy NTP request

我想获得我的 NTP 服务器的 ntp_monlist 响应。
实际上数据包已发送,但我没有收到任何东西。
谁能告诉我为什么?

代码:

#!/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()

回复:

###[ 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

如您所见,我从未收到任何回复。

您有多个问题:

  • 您正在发送第 3 层数据包,因此您需要使用 sr,而不是 srp
  • 您需要指定一个UDP源端口;
  • 您的 NTP 负载格式不正确。

您的 NTP 负载有两个问题。首先,NTP数据包的首字定义如下(RFC 5905):

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

您希望 LI 为 0,VN 为 3,Mode 为 3,因此第一个八位字节为 0 + (3 * 8) + 3,即 0x1b。

其次,最小的NTP数据包是12*4个八位字节。

所以你需要说:

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