在Windows中没有管理员帐户的情况下嗅探原始套接字(SOCK_RAW)

时间:2019-07-07 03:56:10

标签: c++ winapi winsock

我正在Visual Studio和Windows 10 x64下使用c ++创建一个简单的嗅探器,但是当我尝试运行它时。我得到Failed to create raw socket.是因为管理员权限,但是我正在通过Internet进行访问。我可以使用类似CAP_NET_ADMIN的东西,但这是基于linux的。有没有办法在Wireshark非root用户这样的窗口下工作?

//Initialise Winsock
    printf("\nInitialising Winsock...");
    if (WSAStartup(MAKEWORD(2,2), &wsa) != 0)
    {
        printf("WSAStartup() failed.\n");
        return 1;
    }
    printf("Initialised");

    //Create a RAW Socket
    printf("\nCreating RAW Socket...");
    sniffer = socket(AF_INET, SOCK_RAW, IPPROTO_IP);
    if (sniffer == INVALID_SOCKET)
    {
        printf("Failed to create raw socket.\n");
        return 1;
    }
    printf("Created.");

2 个答案:

答案 0 :(得分:1)

Creating a Raw Socket

  

原始套接字提供了操作底层套接字的功能   运输,因此它们可用于构成恶意软件的恶意目的   安全威胁。因此,只有管理员组的成员   可以在Windows 2000及更高版本上创建SOCK_RAW类型的套接字。

答案 1 :(得分:0)

如果有人用 Wine 得到这个,你需要允许 wineserver 使用 Ping.SendPrivileged:

sudo setcap CAP_NET_RAW=ep /usr/bin/wine
sudo setcap CAP_NET_RAW=ep /usr/bin/wineserver
sudo setcap CAP_NET_RAW=ep YOUREXE.exe