#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/in_systm.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <fcntl.h>
#include "nids.h"
#include <string.h>
#define int_ntoa(x) inet_ntoa(*((struct in_addr *)&x))
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;
}
/* 回调函数 */
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;
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)
{
case NIDS_JUST_EST:
tcp_connection->client.collect++;
tcp_connection->server.collect++;
tcp_connection->server.collect_urg++;
tcp_connection->client.collect_urg++;
printf("%sTCP is now establishing\n", address_string);
return;
case NIDS_CLOSE:
printf("--------------------\n");
printf("%sTCP has closed normally\n", address_string);
return;
case NIDS_RESET:
printf("------------------\n");
printf(" %sTCP has been reseted\n ", address_string);
return;
case NIDS_DATA:
{
struct half_stream* hlf;
if(tcp_connection->server.count_new_urg)
{
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)
{
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;
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("The client has recieved new datas are as follow:\n");
for (i=0; i<hlf->count_new; i++)
{
printf("%s", char_to_ascii(content[i]));
}
printf("\n");
}
else
{
hlf=&tcp_connection->server;
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("The server has recieved new datas are as follow:\n");
for (i=0; i<hlf->count_new;i++)
{
printf("%s", char_to_ascii(content[i]));
}
printf("\n");
}
}
default:
break;
}
return;
}
/* 主程序 */
int main()
{
if(!nids_init())
{
printf("Error!\n",nids_errbuf);
exit(1);
}
nids_register_tcp(tcp_protocol_callback);
nids_run();
}
没有合适的资源?快使用搜索试试~ 我知道了~
show_tcp.rar_show_tcp
共1个文件
c:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 102 浏览量
2022-09-14
16:25:10
上传
评论
收藏 1KB RAR 举报
温馨提示
tcp协议分析,在linux下使用,需要先编译。
资源推荐
资源详情
资源评论
收起资源包目录
show_tcp.rar (1个子文件)
show_tcp.c 5KB
共 1 条
- 1
资源评论
APei
- 粉丝: 65
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 最详细的python安装教程,跟着操作即可,最好保证电脑的网络稳定情况下安装.zip
- 浅谈网文教程(91).zip
- 2024 年最新中国大学名单
- Indexea 搜索服务平台的 OpenAPI,用于描述平台的所有接口信息,可以通过这个页面来了解和在线验证平台的所有接口信息
- 利用powerworld软件进行电力系统故障仿真
- 大学生计算机网络基础教程PDF,打破计算机文盲的现象,通俗易懂上手快.zip
- 正确打开网络安全学习路线,循序渐进,从认知到深入理解,最终达到应用的目的.zip
- 提供一种ABS四轮车辆的MatlabSimulink建模与仿真的案例期刊.zip
- flowerstore3.zip
- python爬虫-爬虫实战之,抓今日头条手机App数据并存入MongoDB,亲测可用.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功