Strona 1 z 1

[+] Wysyłanie pakietów

: 01 października 2008, 15:44
autor: killanonimx
Witam.

Mam pytanie i jednocześnie problem. Jak wysyłać pakiety na np.: eth0.
Typem danych pakietu jest char* i pakiet jest przechwycony libpcap.
A gdyby ktoś się pytał do czego mi to, to odpowiadam:
Jest to do eksperymentu z wirtualną maszyną.
I jeszcze dodam: jeśli można gotowy pakiet wysłać biblioteką libnet to napiszcie jak nazywa się ta funkcja.

[Dodano: 2008-10-03, 18:53]
Znalazłem coś takiego:

Kod: Zaznacz cały

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <iostream>
#include <string.h>
#include <sys/socket.h>
#include <features.h>
#include <linux/if_packet.h>
#include <linux/if_ether.h>
#include <errno.h>
#include <sys/ioctl.h>
#include <net/if.h>
#include <netinet/in.h>


int main() {
int rawsock = socket (AF_INET, SOCK_RAW, htons(ETH_P_ALL));

struct sockaddr_ll sll;
struct ifreq ifr;
bzero(&sll, sizeof(sll));
bzero(&ifr, sizeof(ifr));
char* device="eth0";
strncpy((char *)ifr.ifr_name, device, IFNAMSIZ);
ioctl(rawsock, SIOCGIFINDEX, &ifr);
sll.sll_family = AF_PACKET;
sll.sll_ifindex = ifr.ifr_ifindex;
sll.sll_protocol = htons(ETH_P_ALL); 
bind(rawsock, (struct sockaddr *)&sll, sizeof(sll));






int pkt_len=1024;
unsigned char pkt[pkt_len];

memset(pkt, 'A', pkt_len);


write(rawsock, pkt, pkt_len);

//sendto (sock, (char*)packet, sizeof (struct ipst) + sizeof (struct tcpst), 0, (struct sockaddr *) &ip->ip_dst, sizeof (struct sockaddr_in));

return 0;
}
i to coś niedziała :-(. Pomożecie?

[ Dodano: 2008-10-04, 13:07 ]
Znalazłem błąd:

Kod: Zaznacz cały

...
bind(rawsock, (struct sockaddr *)&sll, sizeof(sll)); 
...
Zwraca -1.

Tylko jak to naprawić?

[Dodano: 2008-10-04, 13:33]
Pomogła zmiana z:

Kod: Zaznacz cały

socket (AF_INET, SOCK_RAW, htons(ETH_P_ALL)); 
na:

Kod: Zaznacz cały

socket (PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));