Python和Scapy:纯文本SMTP会话

Python和Scapy:纯文本SMTP会话,python,smtp,scapy,Python,Smtp,Scapy,是否可以使用执行最简单的SMTP会话? 我试着用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(s

是否可以使用执行最简单的
SMTP
会话? 我试着用
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
值?如何计算它们?

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


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

如果您想在此处找到答案,我想您的问题需要更具描述性。请举例说明你想要实现的目标。