[development][tcp/ip][ids] 一个简单有参考价值的库 libnids

 

libhtp 中的例子, 可以通过libnids快速使用. 或者可以快速的写个sniffer.

 

支持三个功能 ip分片重组, tcp乱序重排, 端口扫描发现.

 

工程: https://github.com/MITRECND/libnids

例子: http://libnids.sourceforge.net/printall.c

文档: https://github.com/MITRECND/libnids/blob/master/doc/API.txt

转载于:https://www.cnblogs.com/hugetong/p/7575002.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
由于涉及到较为复杂的网络编程和数据操作,编写这样的软件需要具备一定的技术水平。以下是一个基于libnids的捕获并分析TCP和UDP,然后将捕获到的IP和MAC以及端口号装进数据中的程序的基本框架: 1. 引入必要的文件 ``` #include <libnids.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <mysql/mysql.h> ``` 2. 初始化数据连接 ``` MYSQL *mysql_conn; mysql_conn = mysql_init(NULL); if (!mysql_conn) { printf("mysql_init failed\n"); exit(1); } if (!mysql_real_connect(mysql_conn, "localhost", "root", "password", "database", 0, NULL, 0)) { printf("mysql_real_connect failed\n"); exit(1); } ``` 3. 捕获并分析TCP和UDP数据包 ``` struct tuple4 { u_int32_t saddr; u_int32_t daddr; u_int16_t sport; u_int16_t dport; }; struct connection_info { struct tuple4 addr; int client_to_server; int server_to_client; char *client_data; int client_data_size; char *server_data; int server_data_size; }; void callback(struct connection_info *conn, int direction, char *data, int data_len) { if (conn->client_to_server) { // 处理客户端到服务器的数据包 // 获取IP地址和端口号 char client_ip[INET_ADDRSTRLEN]; char server_ip[INET_ADDRSTRLEN]; inet_ntop(AF_INET, &(conn->addr.saddr), client_ip, INET_ADDRSTRLEN); inet_ntop(AF_INET, &(conn->addr.daddr), server_ip, INET_ADDRSTRLEN); int client_port = ntohs(conn->addr.sport); int server_port = ntohs(conn->addr.dport); // 获取MAC地址 char mac[18]; sprintf(mac, "%02X:%02X:%02X:%02X:%02X:%02X", data[0], data[1], data[2], data[3], data[4], data[5]); // 将数据插入数据 char query[1024]; sprintf(query, "INSERT INTO packets (client_ip, client_port, server_ip, server_port, mac) VALUES ('%s', '%d', '%s', '%d', '%s')", client_ip, client_port, server_ip, server_port, mac); if (mysql_query(mysql_conn, query)) { printf("mysql_query failed: %s\n", mysql_error(mysql_conn)); } } if (conn->server_to_client) { // 处理服务器到客户端的数据包 // ... } } ``` 4. 启动libnids并开始捕获数据包 ``` int main(int argc, char **argv) { if (nids_init() != 0) { printf("nids_init failed\n"); exit(1); } nids_register_tcp(callback); nids_register_udp(callback); nids_run(); return 0; } ``` 以上是一个简单的基于libnids的捕获并分析TCP和UDP数据包,然后将捕获到的IP和MAC以及端口号装进数据中的程序的框架。但是,由于涉及到网络安全等敏感问题,具体实现需要根据具体的需求进行详细的设计和实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值