【发布时间】:2017-03-03 08:52:02
【问题描述】:
我正在用 C 语言编写一个工具,用于记录在我的 Linux 系统上运行的不同应用程序的数据使用情况。为此,我创建了一个原始套接字,然后将其与“eth0”绑定,这是我的接口名称。但我的问题是,这个套接字只捕获传入的数据包(即:目标 MAC 地址作为我系统 MAC 地址的数据包)。我找不到任何将源 MAC 地址作为系统 MAC 地址的数据包。所以这意味着我自己的机器写入的数据包不会被原始套接字捕获。但我想在两个方向上捕获数据包以识别上传和下载的数据大小。有人可以帮忙吗?
int main()
{
int rs,len;
struct sockaddr_ll addr;
char buf[65535];
rs = socket(PF_PACKET,SOCK_RAW,htons(ETH_ALL));
setsockopt(rs,SOL_SOCKET,SO_BINDDEVICE,"eth0",4);
while(recvfrom(rs,buf,65535,&addr,&len) > 0){
//print packets
}
return 0;
}
【问题讨论】:
标签: c sockets network-programming raw-sockets