提领指向不完全类型的指针 的问题

kof989898 2009-11-12 06:26:23
我是用libnids,工具包都装了,以下是代码:
#include "nids.h"
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

/* Libnids的头文件,必须包含 */

char ascii_string[10000];

char *char_to_ascii(char ch)

/* 此函数的功能主要用于把协议数据进行显示 */

{

char *string;

ascii_string[0] = 0;

string = ascii_string;

if (isgraph(ch))

/* 可打印字符 */

{

*string++ = ch;

}

else if (ch == ' ')

/* 空格 */

{

*string++ = ch;

}

else if (ch == '\n' || ch == '\r')

/* 回车和换行 */

{

*string++ = ch;

}

else

/* 其它字符以点"."表示 */

{

*string++ = '.';

}

*string = 0;

return ascii_string;

}

/*

=======================================================================================================================

下面的函数是回调函数,用于分析TCP连接,分析TCP连接状态,对TCP协议传输的数据进行分析

=======================================================================================================================

*/

void tcp_protocol_callback(struct tcp_stream *tcp_connection, void **arg)

{

int i;

char address_string[1024];

char content[65535];

char content_urgent[65535];

struct tuple4 ip_and_port = tcp_connection->addr;

/* 获取TCP连接的地址和端口对 */
int x=ip_and_port.saddr;

strcpy(address_string, inet_ntoa(*((struct in_addr*) &(ip_and_port.saddr))));

/* 获取源地址 */

sprintf(address_string + strlen(address_string), " : %i", ip_and_port.source);

/* 获取源端口 */

strcat(address_string, " <---> ");

strcat(address_string, inet_ntoa(*((struct in_addr*) &(ip_and_port.daddr))));

/* 获取目的地址 */

sprintf(address_string + strlen(address_string), " : %i", ip_and_port.dest);

/* 获取目的端口 */

strcat(address_string, "\n");

switch (tcp_connection->nids_state) /* 判断LIBNIDS的状态 */

{

case NIDS_JUST_EST:

/* 表示TCP客户端和TCP服务器端建立连接状态 */

tcp_connection->client.collect++;

/* 客户端接收数据 */

tcp_connection->server.collect++;

/* 服务器接收数据 */

tcp_connection->server.collect_urg++;

/* 服务器接收紧急数据 */

tcp_connection->client.collect_urg++;

/* 客户端接收紧急数据 */

printf("%sTCP连接建立\n", address_string);

return ;

case NIDS_CLOSE:

/* 表示TCP连接正常关闭 */

printf("--------------------------------\n");

printf("%sTCP连接正常关闭\n", address_string);

return ;

case NIDS_RESET:

/* 表示TCP连接被RST关闭 */

printf("--------------------------------\n");

printf("%sTCP连接被RST关闭\n", address_string);

return ;

case NIDS_DATA:

/* 表示有新的数据到达 */

{

struct half_stream *hlf;

/* 表示TCP连接的一端的信息,可以是客户端,也可以是服务器端 */

if (tcp_connection->server.count_new_urg)

{

/* 表示TCP服务器端接收到新的紧急数据 */

printf("--------------------------------\n");

strcpy(address_string, inet_ntoa(*((struct in_addr*) &(ip_and_port.saddr))));

sprintf(address_string + strlen(address_string), " : %i", ip_and_port.source);

strcat(address_string, " urgent---> ");

strcat(address_string, inet_ntoa(*((struct in_addr*) &(ip_and_port.daddr))));

sprintf(address_string + strlen(address_string), " : %i", ip_and_port.dest);

strcat(address_string, "\n");

address_string[strlen(address_string) + 1] = 0;

address_string[strlen(address_string)] = tcp_connection->server.urgdata;

printf("%s", address_string);

return ;

}

if (tcp_connection->client.count_new_urg)

{

/* 表示TCP客户端接收到新的紧急数据 */

printf("--------------------------------\n");

strcpy(address_string, inet_ntoa(*((struct in_addr*) &(ip_and_port.saddr))));

sprintf(address_string + strlen(address_string), " : %i", ip_and_port.source);

strcat(address_string, " <--- urgent ");

strcat(address_string, inet_ntoa(*((struct in_addr*) &(ip_and_port.daddr))));

sprintf(address_string + strlen(address_string), " : %i", ip_and_port.dest);

strcat(address_string, "\n");

address_string[strlen(address_string) + 1] = 0;

address_string[strlen(address_string)] = tcp_connection->client.urgdata;

printf("%s", address_string);

return ;

}

if (tcp_connection->client.count_new)

{

/* 表示客户端接收到新的数据 */

hlf = &tcp_connection->client;

/* 此时hlf表示的是客户端的TCP连接信息 */

strcpy(address_string, inet_ntoa(*((struct in_addr*) &(ip_and_port.saddr))));

sprintf(address_string + strlen(address_string), ":%i", ip_and_port.source);

strcat(address_string, " <--- ");

strcat(address_string, inet_ntoa(*((struct in_addr*) &(ip_and_port.daddr))));

sprintf(address_string + strlen(address_string), ":%i", ip_and_port.dest);

strcat(address_string, "\n");

printf("--------------------------------\n");

printf("%s", address_string);

memcpy(content, hlf->data, hlf->count_new);

content[hlf->count_new] = '\0';

printf("客户端接收数据\n");

for (i = 0; i < hlf->count_new; i++)

{

printf("%s", char_to_ascii(content[i]));

/* 输出客户端接收的新的数据,以可打印字符进行显示 */

}

printf("\n");

}

else

{

/* 表示服务器端接收到新的数据 */

hlf = &tcp_connection->server;

/* 此时hlf表示服务器端的TCP连接信息 */

strcpy(address_string, inet_ntoa(*((struct in_addr*) &(ip_and_port.saddr))));

sprintf(address_string + strlen(address_string), ":%i", ip_and_port.source);

strcat(address_string, " ---> ");

strcat(address_string, inet_ntoa(*((struct in_addr*) &(ip_and_port.daddr))));

sprintf(address_string + strlen(address_string), ":%i", ip_and_port.dest);

strcat(address_string, "\n");

printf("--------------------------------\n");

printf("%s", address_string);

memcpy(content, hlf->data, hlf->count_new);

content[hlf->count_new] = '\0';

printf("服务器端接收数据\n");

for (i = 0; i < hlf->count_new; i++)

{

printf("%s", char_to_ascii(content[i]));

/* 输出服务器接收到的新的数据 */

}

printf("\n");

}

}

default:

break;

}

return ;

}

void main()

{

if (!nids_init())

/* Libnids初始化 */

{

printf("出现错误:%s\n", nids_errbuf);

exit(1);

}

nids_register_tcp(tcp_protocol_callback);

/* 注册回调函数 */

nids_run();

/* Libnids进入循环捕获数据包状态 */

}







//===============以下是显示的错误==========================
[root@173-26-100-49 7.4.1]# gcc -o test tcp.c -lnids -lpcap -lnet
tcp.c: In function ‘tcp_protocol_callback’:
tcp.c:50: 错误:提领指向不完全类型的指针
tcp.c:50: 警告:传递参数 2 (属于 ‘strcpy’)时将整数赋给指针,未作类型转换
tcp.c:55: 错误:提领指向不完全类型的指针
tcp.c:55: 警告:传递参数 2 (属于 ‘strcat’)时将整数赋给指针,未作类型转换
tcp.c:93: 错误:提领指向不完全类型的指针
tcp.c:93: 警告:传递参数 2 (属于 ‘strcpy’)时将整数赋给指针,未作类型转换
tcp.c:96: 错误:提领指向不完全类型的指针
tcp.c:96: 警告:传递参数 2 (属于 ‘strcat’)时将整数赋给指针,未作类型转换
tcp.c:108: 错误:提领指向不完全类型的指针
tcp.c:108: 警告:传递参数 2 (属于 ‘strcpy’)时将整数赋给指针,未作类型转换
tcp.c:111: 错误:提领指向不完全类型的指针
tcp.c:111: 警告:传递参数 2 (属于 ‘strcat’)时将整数赋给指针,未作类型转换
tcp.c:124: 错误:提领指向不完全类型的指针
tcp.c:124: 警告:传递参数 2 (属于 ‘strcpy’)时将整数赋给指针,未作类型转换
tcp.c:127: 错误:提领指向不完全类型的指针
tcp.c:127: 警告:传递参数 2 (属于 ‘strcat’)时将整数赋给指针,未作类型转换
tcp.c:147: 错误:提领指向不完全类型的指针
tcp.c:147: 警告:传递参数 2 (属于 ‘strcpy’)时将整数赋给指针,未作类型转换
tcp.c:150: 错误:提领指向不完全类型的指针
tcp.c:150: 警告:传递参数 2 (属于 ‘strcat’)时将整数赋给指针,未作类型转换
tcp.c: In function ‘main’:
tcp.c:172: 警告:‘main’ 的返回类型不是 ‘int’



请教高人为什么阿?
...全文
2372 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
renquan1232000 2010-12-17
  • 打赏
  • 举报
回复
楼上正解
yskcg 2010-06-05
  • 打赏
  • 举报
回复
指针在指向结构体时,好像有问题,你必须在程序中声明你的结构体,我以前也经常遇到这种情况.
ty2507 2009-11-13
  • 打赏
  • 举报
回复
提领指向不完全类型的指针,出现这种问题的原因是你少了头文件,好好查一下,看是缺那个加上就哦了
Linux研究小卒 2009-11-12
  • 打赏
  • 举报
回复
是指针传值时候不兼容造成的,检查一下代码
kof989898 2009-11-12
  • 打赏
  • 举报
回复
顶阿
机智的呆呆 2009-11-12
  • 打赏
  • 举报
回复
百度:
错误:提领指向不完全类型的指针
jackyjkchen 2009-11-12
  • 打赏
  • 举报
回复
呃,gcc的中文错误翻译怎么那么郁闷呢……你用VC跑一下,再告诉我中文错误提示,我大概就知道了

我没有你那个库

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧