2012-10-23 17 views
1

我已經寫在Xcode如何在OS X上用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; 
} 

使用libpcap的現在,下面的代碼雖然在Xcode 4.4運行顯示「ERROR」 但是當我去的產品目錄,並運行像這樣的終端:

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

它運行良好
我已經使用setuid(0),但仍然不工作在xCode!
所以,我怎樣才能運行此程序在Xcode根,有一些設置,我有在Xcode做 的Xcode版本:4.4
OSX 10.7獅子
感謝ü

回答

0

我不知道爲什麼人們說和chmod的/dev/bpf*文件。只需將自己添加到access_bpf組,以便您的用戶帳戶可以訪問數據包過濾設備。

轉到Apple menu > System Preferences... > Users & Groups,解鎖面板如果需要的話,單擊+,然後從下拉Group,將組命名爲access_bpf,創造它。然後展開Groups並確保您的用戶帳戶已添加到它。

適合我。我不需要使用sudo來捕獲數據包。 (或每次啓動時需要chmod

+3

,只有當你安裝了Wireshark的,它創建小組工作 - *和*增加了誰安裝Wireshark的給它的用戶,改變BPF設備到它的羣主,並安裝StartupItem在重新啓動時更改BPF設備的組所有者。如果您尚未安裝Wireshark,或者您自己創建了'access_bpf'組,則該組不會存在。 – 2012-10-24 00:56:32

+0

@Guy,有趣,謝謝。那麼簡短的回答:安裝Wireshark並且不用擔心它? ;-) – mpontillo

+0

在OS X上安裝最新版本的Wireshark(我認爲你已經完成了)將安裝所有必要的機制來支持使用BPF(無論是通過libpcap還是別的)而不是root(它是按順序爲了讓Wireshark捕獲而不以root身份運行),是的,這可能是最簡單的方法。 – 2012-10-24 05:40:55

0

的setuid僅適用於一系統(),叉()或者exec()調用,因此這不會幫助你

你可以做的是chmod u+s TCP_packet作爲root用戶,這會做你想要

3

你需要做的應用程序setuid,由構建後擁有的根ING。

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

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*,它允許訪問數據包捕獲設備,直到下次重新啓動

0

或者,因爲您正在調試並希望以root身份完成此操作;只需以root身份啓動Xcode即可。

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

導航到您的項目,你很好去。

享受。

〜摩西