不要使用inet_ntoa,避免出现C4996,基于vs2022用C++写一个根据输入的IP地址清除windows10系统TCP指定链接记录的代码
时间: 2024-05-11 16:20:05 浏览: 133
以下是基于VS2022使用C语言编写的清除Windows 10系统TCP指定连接记录的代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <winsock2.h>
#include <iphlpapi.h>
#include <ws2tcpip.h>
#pragma comment(lib, "iphlpapi.lib")
#pragma comment(lib, "ws2_32.lib")
int main(int argc, char* argv[])
{
if (argc != 2) {
printf("Usage: %s <IP address>\n", argv[0]);
return 1;
}
// 解析输入的IP地址
struct in_addr addr;
if (inet_pton(AF_INET, argv[1], &addr) != 1) {
printf("Invalid IP address: %s\n", argv[1]);
return 1;
}
// 获取TCP连接信息
PMIB_TCPTABLE2 tcpTable = NULL;
ULONG tcpTableSize = 0;
DWORD result = GetTcpTable2(NULL, &tcpTableSize, TRUE);
if (result != ERROR_INSUFFICIENT_BUFFER) {
printf("Failed to get TCP table size\n");
return 1;
}
tcpTable = (PMIB_TCPTABLE2) malloc(tcpTableSize);
result = GetTcpTable2(tcpTable, &tcpTableSize, TRUE);
if (result != NO_ERROR) {
printf("Failed to get TCP table\n");
free(tcpTable);
return 1;
}
// 遍历TCP连接,找到目标地址的连接记录
for (DWORD i = 0; i < tcpTable->dwNumEntries; i++) {
MIB_TCP_ROW2* row = &tcpTable->table[i];
if (row->dwState == MIB_TCP_STATE_ESTAB &&
row->dwLocalAddr == addr.S_un.S_addr) {
// 找到目标连接记录,删除它
result = DeleteTcpEntry(row);
if (result != NO_ERROR) {
printf("Failed to delete TCP entry\n");
free(tcpTable);
return 1;
}
printf("TCP entry deleted\n");
break;
}
}
free(tcpTable);
return 0;
}
```
该程序首先解析输入的IP地址,然后获取系统中所有TCP连接的信息,遍历这些连接,找到目标地址的连接记录,最后删除该记录。需要注意的是,该程序需要管理员权限才能运行。
阅读全文