1

SMTP是否可以使用Scapy执行最简单的会话?我试图读取tcpdump使用Scapy和发送数据包捕获的内容,但没有运气......

这就是我所拥有的

#!/usr/bin/python
from scapy.all import *
from scapy.layers.inet import IP, TCP
source_ip = '1.2.3.4'
source_port = 5100 
source_isn = 1000
dest_ip = '1.2.3.5' 
dest_port = 25
ip=IP(src=source_ip, dst=dest_ip)
SYN=TCP(sport=source_port, dport=dest_port, flags="S", seq=source_isn)
SYNACK=sr1(ip/SYN)
source_isn = SYN.seq + 1
source_ack = SYNACK.seq + 1
CK=TCP(ack=source_ack, sport=source_port, dport=dest_port, flags="A",seq=source_isn)
handshakedone=sr1(ip/ACK)
DTA=TCP(ack=handshakedone.seq+len(handshakedone.load), seq=source_isn, sport=source_port,dport=dest_port,flags="PA")
sr(ip/DTA/Raw(load='mail from: test@gmail.com\r\n'))
send(ip/DTA/Raw(load='rcpto to: me@gmail.com\r\n'))
source_isn = ACK.seq + len(mfrom)
.....
RST=TCP(ack=SYNACK.seq + 1, seq=source_isn, sport=source_port, dport=dest_port, flags="RA")
send(ip/RST)

握手是成功的,但在会话期间应该是什么ACK和价值观?SEQ我该如何计算它们?

4

1 回答 1

0

TCP seq 和 ack 号在rfc 793中描述(从第 24 页开始)。整个规范太长,无法在此处发布,但基本上,有效负载的每个字节都有一个序列号。除了有效载荷字节之外,还有两个控制标志(SYN 和 FIN)获得它们自己的序列号。初始序列号应该是随机的,但如果你只是在玩耍,这并不重要。数据包中的确认号是您希望接收的下一个序列号,数据包中的 seq 字段是该段中的第一个序列号。

因此,要确认给定数据包之前的所有数据包,请将给定数据包的序列号添加到其长度(包括 FIN 或 SYN 标志,如果已设置)并将其放入您的 ack 字段。

于 2014-01-30T19:52:03.610 回答