wiener
написал 12 января 2006 года в 21:41 (2045 просмотров)
Ведет себя
как мужчина; открыл 30 тем в форуме, оставил 76 комментариев на сайте.
Всем доброго времени суток.
Не подскажите как в C перевести сетевую карту в режим promiscuous, а то вижу только широковещательные и адресованные мне пакеты.
Читал man-ы (setsockopt, socket и пр.), но не понял.
Заранее благодарю.
PS: Программа для мирных целей. Для оценки работы сети.
Последние комментарии
-
OlegL, 17 декабря 2023 года в 15:00 →
Перекличка
21
-
REDkiy, 8 июня 2023 года в 9:09 →
Как «замокать» файл для юниттеста в Python?
2
-
fhunter, 29 ноября 2022 года в 2:09 →
Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt?
6
-
Иванн, 9 апреля 2022 года в 8:31 →
Ассоциация РАСПО провела первое учредительное собрание
1
-
Kiri11.ADV1, 7 марта 2021 года в 12:01 →
Логи catalina.out в TomCat 9 в формате JSON
1
DevOps as a Service from Palark
24/7 SRE & DevOps service to cover all your Kubernetes needs.

А SNMP как же?
Свой анализатор.
Ну почитай еще man pcap
Или найди libcap
Хто ж сумлевался-то? :-)
Good Luck,
UT
поглядеть исходник tcpdump, который это умеет делать.
Когда то разбирался с pcap
Вот сам код..
#include "lib.h" static pcap_t *pd; struct ip *myip; struct tcphdr *mytcp; void get(char *, struct pcap_pkthdr *, u_char *packet); int main(int argc, char *argv[]) { struct bpf_program filter; char errbuf[PCAP_ERRBUF_SIZE]; char *cmd; struct pcap_pkthdr handl; pcap_handler lsp; bpf_u_int32 localnet, netmask; char *iface = 0; const u_char *pack; if((iface = pcap_lookupdev(errbuf)) == 0) { fprintf(stderr,"%s\n",errbuf); exit(0); } printf("Use iface %s\n",iface); pd = pcap_open_live(iface,BUFSIZ,1,1000,errbuf); 1 - это твой promiscuous режим pcap_lookupnet(iface,&localnet,&netmask,errbuf); pcap_compile(pd,&filter,"ip proto TCP",0,netmask); pcap_setfilter(pd,&filter); lsp = (pcap_handler)get; if(pcap_loop(pd,-1,lsp,NULL)){ pcap_perror(pd,"pcap_loop"); pcap_close(pd); exit(0); } pcap_close(pd); return 0; } void get(char *user, struct pcap_pkthdr *header, u_char *pack) { myip = (struct ip *)(pack + PPP_HDRLEN); mytcp = (struct tcphdr *)((char *)myip+(myip->ip_hl * 4)); printf("%s[%d] -> %s[%d] (%u)\n",inet_ntoa(myip->ip_src),ntohs(mytcp->th_sport),inet_ntoa(myip->ip_dst),ntohs(mytcp->th_dport),myip->ip_sum); }Мож поможет..
Если что — мы тебе этого не говорили ;)
Ггг, сами мы не месные, от поезда отстали ага ;o)
А можно без использования p_cap, а то у меня через socket сделано:
//***
int s_handle = socket(PF_PACKET,SOCK_RAW,0×300);
if (s_handle == -1) {
printf(«Socket error\n»);
return 0;
}
if (setsockopt(s_handle,SOL_SOCKET, SO_BINDTODEVICE,«eth0\x00»,strlen(«eth0\x00»)+1)){
printf(«Bind error\n»);
return 0;
}
//***
Заранее благодарен.
Что вообще нет идей ?!
через ioctl разве что…
разбери на части ifconfig и tcpdump — там всё есть.
Это tcpdump-то работает «без использования pcap"?
А знает ли кто-нибудь, как сделать это (перевести карту в promiscuous mode) на С для Винды, при помощи ioctl?
В винде нет ioctl. В остальном — ждём decvar’а :))
он здесь. и удивляется недавнему запрету читать msdn пользователю Daria_T.
hint:
OID_GEN_PROMISCUOUS_MODE
RFC 2863
btw: ioctl в винде есть
Ой. decvar следит за нами :)))