tcp syn扫描程序请教

发布于 2022-07-26 14:47:57 字数 446 浏览 16 评论 2


   
         TCP SYN扫描(亦称TCP 半连接扫描)的原理:向目标主机的一个端口发送请求连接的syn数据包,如果没有收到目标主机的syn/ack确认报文,而是RST报文,说明 此端口没有开放,如果收到了syn/ack报文,说明此端口开放的,扫描主机在收到syn/ack后不会回复自己的ACK。
      我想编写代码(用Linux c)实现上述扫描,请问自己构造了带有syn的数据包发送后,如何怎样判断目标主机返回的数据包中是syn/ack,还是RST报文?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

迷鸟归林 2022-07-27 15:30:39

大多数系统的实现是发送tcp syn,若端口是关闭的,目标主机应该发送RST报文吧!

熟人话多 2022-07-27 05:47:42

tcp 头有相应的结构信息,是 flag,每一位代表不同的意思

  1. struct tcphdr {
  2.         __u16   source;
  3.         __u16   dest;
  4.         __u32   seq;
  5.         __u32   ack_seq;
  6. #if defined(__LITTLE_ENDIAN_BITFIELD)
  7.         __u16   res1:4,
  8.                 doff:4,
  9.                 fin:1,
  10.                 syn:1,
  11.                 rst:1,
  12.                 psh:1,
  13.                 ack:1,
  14.                 urg:1,
  15.                 ece:1,
  16.                 cwr:1;
  17. #elif defined(__BIG_ENDIAN_BITFIELD)
  18.         __u16   doff:4,
  19.                 res1:4,
  20.                 cwr:1,
  21.                 ece:1,
  22.                 urg:1,
  23.                 ack:1,
  24.                 psh:1,
  25.                 rst:1,
  26.                 syn:1,
  27.                 fin:1;
  28. #else
  29. #error  "Adjust your <asm/byteorder.h> defines"
  30. #endif
  31.         __u16   window;
  32.         __u16   check;
  33.         __u16   urg_ptr;
  34. };

复制代码

另外,我对上面的原理有些疑问

原理:向目标主机的一个端口发送请求连接的syn数据包,如果没有收到目标主机的syn/ack确认报文,而是RST报文,说明 此端口没有开放,如果收到了syn/ack报文,说明此端口开放的

为何要单独考虑 RST 呢?若对方什么都不回的话不也一样代表没开放端口吗?
如果这样的话,只考虑 SYN/ACK 的回溃不就好了?

[ 本帖最后由 platinum 于 2006-10-24 17:49 编辑 ]

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文