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)
我想获得我的 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)