我已經寫在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獅子
感謝ü
,只有當你安裝了Wireshark的,它創建小組工作 - *和*增加了誰安裝Wireshark的給它的用戶,改變BPF設備到它的羣主,並安裝StartupItem在重新啓動時更改BPF設備的組所有者。如果您尚未安裝Wireshark,或者您自己創建了'access_bpf'組,則該組不會存在。 – 2012-10-24 00:56:32
@Guy,有趣,謝謝。那麼簡短的回答:安裝Wireshark並且不用擔心它? ;-) – mpontillo
在OS X上安裝最新版本的Wireshark(我認爲你已經完成了)將安裝所有必要的機制來支持使用BPF(無論是通過libpcap還是別的)而不是root(它是按順序爲了讓Wireshark捕獲而不以root身份運行),是的,這可能是最簡單的方法。 – 2012-10-24 05:40:55