1

我在 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 Lion中进行一些设置,
谢谢你

4

4 回答 4

3

您需要在构建创建由 root 拥有的应用程序 setuid。

如果你想让程序工作,你需要做:

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*,它允许访问数据包捕获设备,直到下次重新启动

于 2012-10-23T13:47:16.833 回答
0

setuid 仅适用于 system()、fork() 或 exec() 调用,因此这对您没有帮助

你可以做的是chmod u+s TCP_packet作为root用户,这将做你想做的事

于 2012-10-23T13:40:43.253 回答
0

我不确定为什么人们说要对/dev/bpf*文件进行 chmod。只需将您自己添加到该access_bpf组,以便您的用户帐户可以访问数据包过滤设备。

转到Apple menu > System Preferences... > Users & Groups,如果需要,解锁面板,单击+Group从下拉列表中选择,命名组access_bpf,然后创建它。然后展开Groups并确保您的用户帐户已添加到其中。

为我工作。我不需要sudo用来捕获数据包。(或chmod每次开机)

于 2012-10-23T21:23:53.533 回答
0

或者,因为您正在调试并希望以 root 身份完成此操作;只需以 root 身份启动 Xcode。

cd /Applications/Xcode.app/Contents/MacOS/
sudo ./Xcode

导航到您的项目,一切顺利。

享受。

~摩西

于 2012-10-26T21:12:18.603 回答