【问题标题】:tcp ip checking i missing somethingtcp ip 检查我遗漏了一些东西
【发布时间】:2013-07-12 04:19:10
【问题描述】:

我正在使用 winpcap 驱动程序来嗅探数据包, 所以我实际上使用其中的数据包转储示例来获取 pkt_data 等,

当我处理 tcp 标头时,我打印我的端口,我看到它是 80

但是当我尝试做类似的事情时:

  if(ntohl(tcpheader->source_port == 80) || (ntohl(tcpheader->dest_port == 80))) //doesnt work :(
{
    printf("****************HTTP***********");
}         

如果永远不正确 但我清楚地看到我的 printf

printf(" |-Source Port : %u\n",ntohs(tcpheader->source_port));
printf(" |-Destination Port : %u\n",ntohs(tcpheader->dest_port));

其中一个在我的输出中是 80,但我从来没有看到上面的 http,所以我似乎遗漏了一些东西,请您指点我吗?

【问题讨论】:

  • 你应该调用 ntohs(),而不是 ntohl()。端口号为 16 位。

标签: c tcp header port


【解决方案1】:
if(ntohl(tcpheader->source_port == 80) ...

您正在转换比较结果

需要将转换结果和80进行比较:

if (ntohs(tcpheader->source_port) == 80) ...

【讨论】:

  • 各位,我改了,还是看不到http的打印
  • 用你现在的方式更新你的 Q - 如果 printf 输出 80 仍然有问题。 (另外,请注意,您的“http”printf 中没有 \n,这意味着它不会刷新)。
  • 我添加了 \n 并实时排队更新,我停下来查看特定的数据包,但仍然没有。我认为 ntohl 返回 u_long 和 80 “原样”是整数,但据我所知 c 不应该自动转换它?
  • 好吧,我尝试了它所做的一切打印端口为 80 但如果永远不是真的:()
  • 该死的我明白了!它应该是 ntohS 而不是 ntohl ...好吧,现在它可以工作了!我现在觉得自己够笨了,我想是时候睡觉了。谢谢大家的帮助!
【解决方案2】:

你应该写ntohl(tcpheader->source_port) == 80,而不是ntohl(tcpheader->source_port == 80)。否则你ntohl是比较结果而不是端口号。

【讨论】:

  • 谢谢你们,我看了 30 分钟(这里是凌晨 3 点),但我不明白出了什么问题 :)
猜你喜欢
  • 1970-01-01
  • 2011-05-14
  • 1970-01-01
  • 1970-01-01
  • 2021-04-25
  • 2019-03-12
  • 1970-01-01
  • 1970-01-01
  • 2019-05-17
相关资源
最近更新 更多