c - 您如何使用 Xcode 在 OS X 上以普通用户身份调试 libpcap 代码?

标签 c macos unix xcode4 libpcap

我在 xCode 中使用 libpcap 编写了以下代码

#include<pcap.h>
#include<string.h>
#include<stdlib.h>
#include<stdio.h>
#include<ctype.h>
#include<unistd.h>
#define MAXBYTES2CAPTURE 2048


void processPacket(u_char *arg,const struct pcap_pkthdr* pkthdr,const u_char* packet){
    int i=0,*counter=(int*)arg;
    printf("Packet Count:%d\n",++(*counter));
    printf("Recived Packet Size:%d\n",pkthdr->len);
    printf("Payload:\n");
    for(i=0;i<pkthdr->len;i++){
        if(isprint(packet[i]))
           printf("%c",packet[i]);
        else
            printf(". ");
        if((i%16==0&&i!=0)||i==pkthdr->len-1)
            printf("\n");
    }
}

int main(){
    int count=0;
    pcap_t *descr=NULL;
    char errbuf[PCAP_ERRBUF_SIZE];
    memset(errbuf,0,PCAP_ERRBUF_SIZE);
    descr=pcap_open_live("en1", MAXBYTES2CAPTURE, 1, 512, errbuf);
    if(descr!=NULL)
        pcap_loop(descr, -1, processPacket,(u_char*)&count);
    else
        printf("ERROR");


        return 0;
}

现在从 xCode 4.4 运行时显示“错误” 但是当我进入产品目录并在终端中像这样运行时:

sudo ./TCP_packet
password:******** 

运行良好
我已经使用了 setuid(0),但在 xCode 中仍然无法工作!!!
那么,我怎样才能在 xCode 中以 root 身份运行这个程序,我必须在 xCode 中做一些设置吗? xCode ver:4.4
OSX:10.7 狮子
谢谢你

最佳答案

您需要设置应用程序 setuid,构建后由 root 拥有。

如果你想让程序运行你需要做的:

chown root:wheel TCP_packet
chmod u+s TCP_packet

这将允许它以 root 权限运行,从而访问数据包捕获设备。

如果您安装了 wireshark,它应该已经将您的用户帐户添加到 access_bpf 组,该组允许访问 /dev/bpf* 设备,即执行数据包捕获所需的内容。

在这个助手之前,我曾经这样做:sudo chgrp admin/dev/bpf*; sudo chmod g+r/dev/bpf*,允许访问数据包捕获设备直到下次重启

关于c - 您如何使用 Xcode 在 OS X 上以普通用户身份调试 libpcap 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13031601/

相关文章:

objective-c - 如何在 OSX 中调试 XPC 服务和客户端应用程序之间的通信

linux - 从 "sysstat"的输出中 Grep 特定字段

c - 将 c 应用程序从 Unix 移植到 Linux 时的 Pragmas 行为

unix - 为什么在使用标准输入和输出的 csh 脚本中出现 "No Match"错误?

将指针转换为 int

c - 如何优化KASUMI算法的S盒?

javascript - Electron 将图像设置为壁纸(OS X 和 Windows)

c - 初始化结构指针数组的正确方法是什么?

ios - 在 .c 文件中发布通知

cocoa - NSUserDefaults objectForKey 输出比较不起作用