【问题标题】:Can't create raw socket with admin account on Windows 7无法在 Windows 7 上使用管理员帐户创建原始套接字
【发布时间】:2016-02-12 01:13:24
【问题描述】:

根据this page,如果帐户具有管理权限,则允许在 Windows 7 下创建原始套接字。我的本地帐户是管理员,但它仍然不允许我创建套接字。

如果我运行这个:

#include <stdio.h>
#include <stdlib.h>
#include <winsock2.h>
#include <ws2tcpip.h>

void sockerr(char *message)
{
        char errbuf[300];
        FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, WSAGetLastError(),
                      0, errbuf, sizeof(errbuf), NULL);
        printf("%s: (%d) %s", message, WSAGetLastError(), errbuf);
}

int main()
{
    int sock;
    struct sockaddr_in sin;
    struct WSAData data;

    if (WSAStartup(2, &data)) {
        fprintf(stderr, "Error in WSAStartup: %d\n", WSAGetLastError());
        exit(1);
    }

    sock = socket(AF_INET, SOCK_RAW, IPPROTO_IGMP);
    if (sock == -1) {
        sockerr("socket failed");
        exit(1);
    }
    printf("opened raw socket\n");
    closesocket(sock);
    return 0;    
}

我明白了:

套接字失败:(10013) 尝试以某种方式访问​​套接字 被其访问权限所禁止。

但我是管理员:

这是在我使用 Windows 7 Pro 的家庭桌面上。我安装了 McAfee Antivirus Plus,但禁用它没有任何效果。

该程序在我的 Windows 7 Enterprise 笔记本电脑上运行良好。

有什么想法吗?

【问题讨论】:

  • 你运行它提升了吗? (即使用“以管理员身份运行”或等效项)

标签: c windows sockets raw-sockets


【解决方案1】:

不知道为什么要使用原始套接字,但似乎解决方案是使用winpcap 如果你用谷歌搜索,你可以找到使用它的例子。 这是一个示例:http://www.binarytides.com/raw-sockets-packets-with-winpcap/

在我尝试这个之前,我还要确保程序以管理员身份运行。也许您是管理员,但程序没有以该权限运行。

【讨论】:

  • 选择“以管理员身份运行”就可以了。看来我的 W7 Enterprise 盒子总是以管理员身份启动命令提示符,这就是它在那里工作的原因。我的 W7 Pro 盒子不这样做,所以我必须明确地以管理员身份启动它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-12
  • 2011-04-16
  • 1970-01-01
  • 2011-01-01
  • 2020-07-13
  • 2016-05-09
  • 1970-01-01
相关资源
最近更新 更多