首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在替罪羊中确认数据的密码

问在替罪羊中确认数据的密码
EN

Stack Overflow用户
提问于 2015-11-02 11:29:01
回答 2查看 4.9K关注 0票数 6

我在玩弄替罪羊,尝试做一个像nmap一样的动作,我成功地进行了三次握手,如果我连接到smtp服务器,我会自动接收数据,但我无法确认。

我已经通过netcat连接到它,以了解它为什么不能工作,nc实际上发送了一个ACK数据包,它的TCP ack字段设置为接收到的数据段的长度。所以,我也在尝试对scapy做同样的处理,但是我不知道在哪里可以找到TCP段的长度。我尝试了一个lsc(TCP),但是我看不到这个领域。

下面是netcat连接的wireshark捕获:

​

​

以及包装的细节:

​

​

如您所见,数据下面的数据包的ack字段是37 +1= 38。

有人知道在哪里或者怎么能找到它吗?

编辑:

实际上没有给出段长的字段,但是可以用两种方法来计算:

代码语言:javascript
复制
    tcp_seg_len = len(rp.getlayer(Raw).load)
    # or
    ip_total_len = rp.getlayer(IP).len
    ip_header_len = rp.getlayer(IP).ihl * 32 / 8
    tcp_header_len = rp.getlayer(TCP).dataofs * 32 / 8
    tcp_seg_len = ip_total_len - ip_header_len - tcp_header_len

    ans_ack,unans_ack = sr(IP(dst=ip)/TCP(sport=pkt[1].dport, \
                                          dport=pkt[1].sport, \
                                          seq=rp[1].ack, \
                                          ack=tcp_seg_len + 1, \
                                          flags="A"), \
                           verbose=0, timeout=1)

但是,当我打印值时,我得到了好的ack号,但是当我看到wireshark捕获时,我有一个巨大的ack号,数据包被标记为"ACKed未见段“。但是,当我查看十六进制中的字节时,得到了正确的值。有没有人知道为什么会发生这种情况,以及如何解决?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-02 16:02:00

Wireshark使用相对数字在它的显示中,所以右边的替罪羊线是:

代码语言:javascript
复制
    ans_ack,unans_ack = sr(IP(dst=ip)/TCP(sport=pkt[1].dport, \
                                      dport=pkt[1].sport, \
                                      seq=rp[1].ack, \
                                      ack=rp[1].seq + tcp_seg_len, \
                                      flags="A"), \
                       verbose=0, timeout=1)

下面的代码(参见问题中的编辑)确实有效:

代码语言:javascript
复制
ip_total_len = rp.getlayer(IP).len
ip_header_len = rp.getlayer(IP).ihl * 32 / 8
tcp_header_len = rp.getlayer(TCP).dataofs * 32 / 8
tcp_seg_len = ip_total_len - ip_header_len - tcp_header_len
ans_ack,unans_ack = sr(IP(dst=ip)/TCP(sport=pkt[1].dport, \
                                      dport=pkt[1].sport, \
                                      seq=rp[1].ack, \
                                      ack=rp[1].seq + tcp_seg_len, \
                                      flags="A"), \
                           verbose=0, timeout=1)
票数 6
EN

Stack Overflow用户

发布于 2016-08-18 12:04:32

要获得TCP段长度(已对IPv6通信量进行了验证):

代码语言:javascript
复制
tcp_header_len = rp.getlayer(TCP).dataofs * 32 / 8
tcp_seg_len = rp.plen - tcp_header_len
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33476561

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档