取消引用指向不完整类型“ struct tcphdr”的指针?

问题描述

我正在尝试从Ubuntu 18.04上的NetworkSecurityTools本书中编译“示例11-9。SYNplescan工具的源代码”: http://books.gigatux.nl/mirror/networksecuritytools/0596007949/networkst-CHP-11-SECT-4.html

但是它说

error: dereferencing pointer to incomplete type ‘struct tcphdr’
     if (tcp->th_flags == 0x14)
            ^~

我该如何解决?

解决方法

在进行以下更改之后,人员会发生变化,包括来来去去

@@ -1,9 +1,12 @@
+#define _DEFAULT_SOURCE 1
 #define _BSD_SOURCE 1
 #include <stdio.h>
 #include <unistd.h>
 #include <time.h>
 #include <libnet.h>
 #include <pcap.h>
+#include <netinet/tcp.h>
+#include <netinet/ip.h>
 
 int answer = 0;            /* flag for scan timeout */
 
@@ -42,7 +45,7 @@
 int
 main (int argc,char *argv[])
 {
-  char *device = NULL;        /* device for sniffing/sending */
+  const char *device = NULL;        /* device for sniffing/sending */
   char o;            /* for option processing */
   in_addr_t ipaddr;        /* ip address to scan */
   u_int32_t myipaddr;        /* ip address of this host */

我能够使用:

gcc -Wall 1.c -lnet -lpcap

,没有编译器消息。我想一旦netinet/tcp.hlibnet.h包含了pcap.h以后,情况似乎就不再一样了,您必须为netinet/tcp.h包含struct tcphdr

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...