0

我正在尝试从 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)
            ^~

我该如何解决?

4

1 回答 1

1

在以下变化之后,人们会发生变化并包括来来去去:

@@ -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.h被包含libnet.h或可能被包含pcap.h- 似乎不再是这种情况了,您必须将netinet/tcp.h自己包含在内struct tcphdr

于 2020-09-10T10:21:11.260 回答