1、使用socket编程
通过创建一个简单的客户端-服务器模型,使用TCP或UDP协议监控网络连接的状态。可以定期发送ping
请求并记录响应时间。
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <unistd.h> #define SERVER_IP "8.8.8.8" // Google DNS #define PORT 80 void check_connection() { int sock = socket(AF_INET, SOCK_STREAM, 0); if (sock < 0) { perror("Socket creation failed"); return; } struct sockaddr_in server_addr; server_addr.sin_family = AF_INET; server_addr.sin_port = htons(PORT); inet_pton(AF_INET, SERVER_IP, &server_addr.sin_addr); if (connect(sock, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) { printf("Connection failed\n"); } else { printf("Connected to %s:%d\n", SERVER_IP, PORT); } close(sock); } int main() { check_connection(); return 0; }
2、使用系统命令
调用系统命令(如ping
、tracert
等)并解析其输出。可以使用popen()
函数来执行命令并读取结果,监控目标主机的可达性和延迟。
#include <stdio.h> #include <stdlib.h> void check_connection() { char command[50]; sprintf(command, "ping -c 4 8.8.8.8"); // Ping Google DNS system(command); } int main() { check_connection(); return 0; }
3、基于libpcap库
使用libpcap
库捕获网络数据包,分析流量情况。可以编写程序过滤特定类型的流量,如HTTP、TCP等,来监控网络活动。
#include <stdio.h> #include <pcap.h> void packet_handler(u_char *args, const struct pcap_pkthdr *header, const u_char *packet) { printf("Captured a packet with length of [%d]\n", header->len); } void check_traffic() { char *dev = pcap_lookupdev(NULL); if (dev == NULL) { perror("No suitable device found"); return; } char errbuf[PCAP_ERRBUF_SIZE]; pcap_t *handle = pcap_open_live(dev, BUFSIZ, 1, 1000, errbuf); if (handle == NULL) { fprintf(stderr, "Could not open device %s: %s\n", dev, errbuf); return; } pcap_loop(handle, 10, packet_handler, NULL); pcap_close(handle); } int main() { check_traffic(); return 0; }
4、编译和运行
1)编译
gcc socket_monitor.c -o socket_monitor
gcc command_monitor.c -o command_monitor
gcc pcap_monitor.c -o pcap_monitor -lpcap
2)运行
./socket_monitor
./command_monitor
./pcap_monitor