je suis sous ubuntu 8, j'essaie de créer un paquet raw pour pouvoir vérifier des information concernant les couchez les plus bas de la pile ip......
bon quand j'essaie de créer une socket de type SOCK_RAW ou SOCK_PACKET j'ai comme sortie du perror connect: Operation not supported, voici mon code incomplet mais ca bloc a la partie connecte


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
 
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
 
#include <netinet/in.h>
#include <sys/socket.h>
 
#include <sys/ioctl.h>
#include <net/if.h>
 
#define PORT 12345 // the port client will be connecting to 
 
#define MAXDATASIZE 500 // max number of bytes we can get at once 
 
int main(int argc, char *argv[])
{
	int sockfd, numbytes;
	char buf[MAXDATASIZE];
	struct hostent *he;
	struct sockaddr_in their_addr; // connector's address information
 
	if (argc < 2)
	{
		fprintf(stderr,"usage: client hostname\n");
		exit(1);
	}
 
	if ((he=gethostbyname(argv[1])) == NULL)
	{	// get the host info
		perror("gethostbyname");
		exit(1);
	}
 
	if ((sockfd = socket(AF_INET, SOCK_PACKET, 0 )) == -1)
	{
		perror("socket");
		exit(1);
	}
 
	their_addr.sin_family = AF_INET;    // host byte order
	their_addr.sin_port = htons(PORT);  // short, network byte order
	their_addr.sin_addr = *((struct in_addr *)he->h_addr);
	memset(their_addr.sin_zero, '\0', sizeof their_addr.sin_zero);
 
	if (connect(sockfd, (struct sockaddr *)&their_addr, sizeof their_addr) == -1)
	{
		perror("connect");
		exit(1);
	}
}