C++ 使用libpcap获取数据包的uid

C++ 使用libpcap获取数据包的uid,c++,linux,tcp,libpcap,C++,Linux,Tcp,Libpcap,是否可以使用libpcap获取捕获的tcp数据包的有效uid?换句话说,我可以使用libpcap来获取创建所述数据包的人的用户id吗?否,UID信息(如果有)不会通过pcap使用的AF_数据包通道传播。如果数据包是从另一台计算机发送的,则无法保证发送数据包的人拥有用户id——它可能拥有,例如,由一个没有用户ID概念的小型嵌入式操作系统发送 如果数据包是从您的计算机发送的,libpcap本身无法告诉您发送数据包的用户ID。但是,如果您解析TCP数据包,您可以获得数据包的源IP地址和端口号,并且根据

是否可以使用libpcap获取捕获的tcp数据包的有效uid?换句话说,我可以使用libpcap来获取创建所述数据包的人的用户id吗?

否,UID信息(如果有)不会通过pcap使用的AF_数据包通道传播。

如果数据包是从另一台计算机发送的,则无法保证发送数据包的人拥有用户id——它可能拥有,例如,由一个没有用户ID概念的小型嵌入式操作系统发送


如果数据包是从您的计算机发送的,libpcap本身无法告诉您发送数据包的用户ID。但是,如果您解析TCP数据包,您可以获得数据包的源IP地址和端口号,并且根据您运行的操作系统,您可能可以获得计算机上所有活动TCP连接的表,其中可能包含与之关联的进程ID或用户ID。(但是,请注意,例如,在UN*X系统上,给定TCP连接的给定文件描述符可以由使用不同有效或真实用户ID运行的多个进程共享,在这种情况下,如果您所拥有的只是使用libpcap捕获的传输包,那么您将没有足够的信息来确定用户ID(有效或真实)real,发送数据包的进程的名称,因为您不知道发送数据包的进程。)

因此有必要使用netfilter?请参阅:这是我的难题。起初,我打算按照你的建议去做,但是,我只有那包东西。我的问题是我试图跟踪用户访问的URL,您描述的方法在90%的情况下都有效。但是,当有两个用户访问同一站点的不同页面时,我不知道谁去了哪里。这种跟踪只有在用户的机器上运行时才起作用。除非HTTP请求包含标识用户的信息,否则您无法跟踪在服务器上运行软件或在网络上执行第三方捕获的用户访问的URL。软件在用户的计算机上运行,即,用户的计算机有多个用户。用户可能会使用不同的浏览器实例,因此将使用不同的连接和不同的本地端点访问该站点,这样您就可以知道谁去了哪里。(如果他们使用的是同一个浏览器实例,他们在计算机上看起来就像是同一个用户,因此问题在这种情况下是无法解决的。)我可以判断有多个用户访问服务器,但我无法匹配哪个用户访问了哪个页面,除非连接上有时间戳,否则我可能会这样做,基于与捕获数据包的时间戳的相似性。