【问题标题】:Sniffing raw sockets (SOCK_RAW) without Administrator account in windows在 Windows 中没有管理员帐户的情况下嗅探原始套接字 (SOCK_RAW)
【发布时间】:2021-02-12 03:37:07
【问题描述】:

我正在 Visual Studio 和 windows 10 x64 下使用 c++ 创建一个简单的嗅探器,但是当我尝试运行它时。我得到了Failed to create raw socket.,这是因为管理员权限,但我正在访问互联网。我可以使用 CAP_NET_ADMIN 之类的东西,但它是基于 linux 的。有没有办法在windows下做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.");

【问题讨论】:

  • 您可以提升您的进程权限。无需以其他用户身份运行,
  • socket:"否则返回INVALID_SOCKET的值,调用WSAGetLastError可以得到具体的错误码。"
  • 在代码级别我该怎么做?
  • 是否有另一种方法可以在不使用管理员的情况下嗅探原始套接字?
  • 完全没有,但我想看看它是如何工作的。

标签: c++ winapi winsock


【解决方案1】:

Creating a Raw Socket:

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

【讨论】:

    【解决方案2】:

    如果有人使用 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
    

    【讨论】:

      猜你喜欢
      • 2014-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-24
      相关资源
      最近更新 更多