Gethostbyaddr -> segmentation fault
Laurent
-
batmat Messages postés 1871 Statut Membre -
batmat Messages postés 1871 Statut Membre -
Salut !
Je travaille sur une appli qui est en fait une sonde qui capte les paquets et qui les traite selon une politique de securite.
voici une des mes fonctions :
/*------------------------------------------------------------------------------
Name : netLogUdpDatagramme : log des datagrammes UDP
Syntaxe : long netLogUdpDatagramme( struct udphdr *udp_hdr, struct ctx_t *ctx, char *errmsg)
Description :
Input : udp_hdr = pointeur sur la trame udp
ctx = pointeur sur le contexte de communication
Output : errmsg = pointeur sur le message d'erreur
Return : 0 = OK
-1 = PB status inconnu
---------------------------------------------------------------------------------*/
#undef FUNCT
#define FUNCT "netLogUdpDatagramme()"
long
netLogUdpDatagramme (struct msg_syslog msglog, struct udphdr *udp_hdr,
struct ctx_t *ctx, char *errmsg)
{
struct in_addr ip_src, ip_dst;
struct hostent *sd_id = NULL;
char srcipname[255] = "", dstipname[255] = "";
char srcname[255] = "", dstname[255] = "";
char buff[255] = "";
ip_src.s_addr = ctx->ip_src;
printf("ah comprend pas quand meme\n");
/*CA PLANTE ICI*/sd_id = gethostbyaddr ((char *) &ip_src.s_addr, sizeof (ip_src.s_addr),AF_INET);
strncpy (srcipname, inet_ntoa (ip_src), 250);
if (sd_id)
strncpy (srcname, sd_id->h_name, 250);
else
strncpy (srcname, srcipname, 250);
ip_dst.s_addr = ctx->ip_dst;
/*ICI AUSSI*/ sd_id = gethostbyaddr ((char *) &ip_dst.s_addr, sizeof (ip_dst.s_addr),AF_INET);
strncpy (dstipname, inet_ntoa (ip_dst), 250);
if (sd_id)
strncpy (dstname, sd_id->h_name, 250);
else
strncpy (dstname, dstipname, 250);
if (netUdpMessageDecode (ntohs (udp_hdr->source), buff) < 0) {
if (netUdpMessageDecode (ntohs (udp_hdr->dest), buff) < 0)
sprintf (buff, "Unknown UDP service %d %d",
ntohs (udp_hdr->source), ntohs (udp_hdr->dest));
}
if (SyslogMode == 1)
Notify (msglog, ctx);
return (0);
}
J'obtiens un segmentation fault au niveau des appels a gethostbyaddr. la signature de la fonction est bien respectee, les types sont ok. je suis sous redhat 8.0, kernel 2.4.18-14
je ne comprends pas.
si quelqu'un a une idee.
Je travaille sur une appli qui est en fait une sonde qui capte les paquets et qui les traite selon une politique de securite.
voici une des mes fonctions :
/*------------------------------------------------------------------------------
Name : netLogUdpDatagramme : log des datagrammes UDP
Syntaxe : long netLogUdpDatagramme( struct udphdr *udp_hdr, struct ctx_t *ctx, char *errmsg)
Description :
Input : udp_hdr = pointeur sur la trame udp
ctx = pointeur sur le contexte de communication
Output : errmsg = pointeur sur le message d'erreur
Return : 0 = OK
-1 = PB status inconnu
---------------------------------------------------------------------------------*/
#undef FUNCT
#define FUNCT "netLogUdpDatagramme()"
long
netLogUdpDatagramme (struct msg_syslog msglog, struct udphdr *udp_hdr,
struct ctx_t *ctx, char *errmsg)
{
struct in_addr ip_src, ip_dst;
struct hostent *sd_id = NULL;
char srcipname[255] = "", dstipname[255] = "";
char srcname[255] = "", dstname[255] = "";
char buff[255] = "";
ip_src.s_addr = ctx->ip_src;
printf("ah comprend pas quand meme\n");
/*CA PLANTE ICI*/sd_id = gethostbyaddr ((char *) &ip_src.s_addr, sizeof (ip_src.s_addr),AF_INET);
strncpy (srcipname, inet_ntoa (ip_src), 250);
if (sd_id)
strncpy (srcname, sd_id->h_name, 250);
else
strncpy (srcname, srcipname, 250);
ip_dst.s_addr = ctx->ip_dst;
/*ICI AUSSI*/ sd_id = gethostbyaddr ((char *) &ip_dst.s_addr, sizeof (ip_dst.s_addr),AF_INET);
strncpy (dstipname, inet_ntoa (ip_dst), 250);
if (sd_id)
strncpy (dstname, sd_id->h_name, 250);
else
strncpy (dstname, dstipname, 250);
if (netUdpMessageDecode (ntohs (udp_hdr->source), buff) < 0) {
if (netUdpMessageDecode (ntohs (udp_hdr->dest), buff) < 0)
sprintf (buff, "Unknown UDP service %d %d",
ntohs (udp_hdr->source), ntohs (udp_hdr->dest));
}
if (SyslogMode == 1)
Notify (msglog, ctx);
return (0);
}
J'obtiens un segmentation fault au niveau des appels a gethostbyaddr. la signature de la fonction est bien respectee, les types sont ok. je suis sous redhat 8.0, kernel 2.4.18-14
je ne comprends pas.
si quelqu'un a une idee.
A voir également:
- Gethostbyaddr -> segmentation fault
- Erreur de segmentation c - Forum C
- Scanf segmentation fault ✓ - Forum Programmation
- Zsh segmentation fault ✓ - Forum Assembleur
- Erreur de segmentation C++ ✓ - Forum C++
- Segmentation fault - Forum Programmation
2 réponses
J'ai entendu parlé d'un pb de stockage de chaine statique pour gethostbyname, qui peut poser des pbs à l'arrivée de signaux (voir Linux magazine, mais je sais plus trop si c'est le dernier puisque je suis en train de les relire) => pb peut-être aussi avec gethostbyaddr ?!?
(Dsl j'essaie hein, j'ai pas fait de prog système depuis un an ! ;-p )
@++
Vous hésitez entre Linux et Windows?
Vous voulez dépenser du temps ou de l'argent ?
(Dsl j'essaie hein, j'ai pas fait de prog système depuis un an ! ;-p )
@++
Vous hésitez entre Linux et Windows?
Vous voulez dépenser du temps ou de l'argent ?