【问题标题】:How can I deal with closed ports in Scapy?如何处理 Scapy 中的封闭端口?
【发布时间】:2015-01-20 10:21:49
【问题描述】:

我试图通过在端口 22、53 和 80 上向我的本地路由器发送 TCP / IP 数据包来了解 Scapy 的工作原理。端口 53 和 80 是开放的 - 22 是关闭的:

p = sr(IP(dst="192.168.1.1")/TCP(dport=[22, 53, 80]))

Begin emission:
.*Finished to send 3 packets.
.................................................
.................................................
.................................................
etc
.........................................^C
Received 24571 packets, got 2 answers, remaining 1 packets

如果我只是将数据包发送到端口 53 和 80 - 不会出现问题:

In [5]: p = sr(IP(dst="192.168.1.1")/TCP(dport=[53, 80]))
Begin emission:
.*Finished to send 2 packets.
*
Received 3 packets, got 2 answers, remaining 0 packets

Scapy 版本 -> 2.3.1(最新)

  • 如何处理 Scapy 中的封闭端口?
  • 为什么我收到这么多答案?

更新 感谢@pss的评论,这里是使用过滤器host 192.168.1.1捕获的wireshark数据:

In [28]: p = sr(IP(dst="192.168.1.1")/TCP(dport=[53, 80, 1111]))
Begin emission:
.**Finished to send 3 packets.
..........................................
..........................................
..........................................
etc
.........................^C
Received 313 packets, got 2 answers, remaining 1 packets

【问题讨论】:

  • 尝试使用wireshark查看数据包! :)
  • 我添加了一个wireshark捕获。

标签: python network-programming scapy


【解决方案1】:

似乎端口 22 和 1111 被过滤了:它们可能在系统上被关闭或打开,但某些东西(防火墙)阻止我们得到答案。

如果您希望sr() 在某些数据包没有收到任何应答的情况下终止,您可以添加一个timeout= 值(以秒为单位):

p = sr(IP(dst="192.168.1.1")/TCP(dport=[22, 53, 80]), timeout=2)

【讨论】:

  • 你知道为什么我在目的端口不存在的情况下会收到这么多数据包吗? (->Received 24571 packets)
  • 这些是 Scapy 看到的与 Scapy 发送的数据包相关的数据包(它们不是 sr() 返回的答案)。您看到大量数据的原因可能有很多(例如,您在另一个进程中运行下载,或者您看到来自网络上其他站点的流量等)。尝试运行sniff(prn=lambda x: x.summary()) 以了解 Scapy 看到了哪些数据包。
  • 是的,这解释了所有这些数据包!
猜你喜欢
  • 2013-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-20
  • 1970-01-01
  • 2021-06-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多