Я пытался создать свой собственный сниффер (ТОЛЬКО ДЛЯ РАЗВЛЕЧЕНИЯ), и я работаю на Mac. Я использую libpcap, очень хорошую библиотеку для сниффинга. Итак, я использовал этот простой сниффер, который нюхает 5 пакетов: (Написано на C)
#include <pcap.h>
#include "hacking.h"
void pcap_fatal(const char *failed_in, const char *errbuf) {
printf("Fatal Error in %s: %s\n", failed_in, errbuf);
exit(1);
}
int main() {
struct pcap_pkthdr header;
const u_char *packet;
char errbuf[PCAP_ERRBUF_SIZE];
char *device;
pcap_t *pcap_handle;
int i;
device = pcap_lookupdev(errbuf);
if(device == NULL)
pcap_fatal("pcap_lookupdev", errbuf);
printf("Sniffing on device %s\n", device);
pcap_handle = pcap_open_live(device, 4096, 1, 0, errbuf);
if(pcap_handle == NULL)
pcap_fatal("pcap_open_live", errbuf);
for(i=0; i < 5; i++) {
packet = pcap_next(pcap_handle, &header);
printf("Got a %d byte packet\n", header.len);
dump(packet, header.len);
}
pcap_close(pcap_handle);
}
Если вам интересно, да, я взял это из книги (Hacking: The Art of Exploitation) и немного изменил. Проблема в том, что если я запускаю это в Linux, все работает отлично, без проблем. Но если я запускаю это на Mac, это не работает и не захватывает никаких пакетов.
Может ли кто-нибудь из вас помочь? Заранее спасибо!
pcap_next
может не возвращаться, пока буфер не будет заполнен. Вы должны использовать ненулевой тайм-аут при чтении (например, 1000) и проверять, был ли возвращен пакет. - person Petesh   schedule 23.02.2013pcap_open_live()
или вызываетpcap_set_promisc()
после вызоваpcap_create()
и перед вызовомpcap_activate()
? В противном случае вы не работаете в беспорядочном режиме, поэтому вы будете видеть только пакеты, отправленные на ваш компьютер или с него, а также широковещательные/многоадресные пакеты; запуск tcpdump по умолчанию переводит интерфейс в неразборчивый режим, и все программы, включая вашу, могут видеть сторонние пакеты. - person   schedule 14.06.2013