【问题标题】:set socket option is why so important for a socket (IP_HDRINCL) In ICMP request?设置套接字选项为什么对 ICMP 请求中的套接字 (IP_HDRINCL) 如此重要?
【发布时间】:2014-03-01 16:19:57
【问题描述】:

我是套接字编程的新手

我看到了一个ICMP请求程序,他们使用setsockopt到一个套接字

int on = 1;

setsockopt(s, IPPROTO_IP, IP_HDRINCL, &on, sizeof(on))

但是即使我不使用这个语句,程序也可以正常运行。为什么会这样 重要的是要向内核提及这个套接字,包括 IP 结构?

【问题讨论】:

    标签: c sockets kernel icmp setsockopt


    【解决方案1】:

    IP_HDRINCL 选项执行以下操作(来自手册页):

    除非在套接字上启用了IP_HDRINCL 套接字选项,否则 IPv4 层会在发送数据包时生成 IP 标头。启用后,数据包必须包含 IP 标头。用于接收的 IP 标头始终包含在数据包中。

    大概您的程序正在构建一个 IP 标头。如果您删除此选项,它将使用内核的 IP 标头。这是否“有效”取决于您的程序的功能。也许在某些情况下,它想要自定义 IP 标头,并且删除此标头将无法正常工作。

    如果您发布程序的其余部分或告诉我们一些关于它的信息,我们可能会提供帮助。

    【讨论】:

    • www.lainoox.com/tag/icmp-echo-r​​equest/‎
    • 这给了我一个 404,但是发出 icmp 回显请求的东西通常在 IP 标头中设置 TTLDF(除了其他东西),所有这些都需要标头手动编写。
    • 但是当我在 Wireshark 中看到它时,TTL 和 DF 相应地为 255 和 0(因为可能默认的 TTL 和 DF 将适用于我的情况)并在谷歌中尝试 URL 或简单地删除最后一个反斜杠在里面,
    • 您发布的链接是针对蓝精灵攻击的。这是通过将源地址设置为受害者的 IP 地址(源地址欺骗)来实现的,因为回复者会将数据包发送回该地址,从而放大攻击。去掉所涉及的socket选项,意味着源地址被设置为攻击者自己主机上的egress接口的源地址(即停止源地址欺骗工作),这将产生攻击者攻击自己而不是攻击者的效果。受害者 - 在许多观点上都是一个好的结果。
    猜你喜欢
    • 2012-01-07
    • 2012-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-12
    • 1970-01-01
    • 2011-05-29
    • 1970-01-01
    相关资源
    最近更新 更多