8791 sujets

Développement web côté serveur, CMS

Bonjour, je suis en train d'essayer de logger mes logs Iptables (parefeux) dans une base Mysql.
Jusque la tout marche sauf que pour l'ip par exemple 80.423.52.8 il va comprendre 80*423*52*8 et va enregegistrer le résultat (me semble t-il)
Smiley sweatdrop
Pas super utile pour afficher mes fichiers de logs sur une page...

Si quelqu'un saurait solutionner mon problème =)

Merci
Modifié par epheo (24 Aug 2009 - 15:07)
Quel est le type de ta colonne dans ta base ?

J'imagine qu'il ne faut pas que ce soit de l'INT mais du varchar ou text.
Salut,

On ne pourrait pas le croire comme ça, mais une IP est une chaine, et non un nombre. Donc tu peux enregistrer les IPs en VARCHAR(15).
Erreur SQL pour l'Ip de destination...
Etrange

a écrit :
failed : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'unsigned default NULL, `ip_daddr` varchar(15) unsigned default NULL, `ip_pro' at line 1


mon requête SQL ressemble a ça:

a écrit :

CREATE TABLE `ulog` (
`id` int(10) unsigned NOT NULL auto_increment,
`raw_mac` varchar(80) default NULL,
`oob_time_sec` int(10) unsigned default NULL,
`oob_time_usec` int(10) unsigned default NULL,
`oob_prefix` varchar(32) default NULL,
`oob_in` varchar(32) default NULL,
`oob_out` varchar(32) default NULL,
`ip_saddr` varchar(15) unsigned default NULL,
`ip_daddr` varchar(15) unsigned default NULL,
`ip_protocol` tinyint(3) unsigned default NULL,
`ip_ttl` tinyint(3) unsigned default NULL,
`tcp_sport` smallint(5) unsigned default NULL,
`tcp_dport` smallint(5) unsigned default NULL,
`udp_sport` smallint(5) unsigned default NULL,
`udp_dport` smallint(5) unsigned default NULL,
`pwsniff_user` varchar(30) default NULL,
`pwsniff_pass` varchar(30) default NULL,
UNIQUE KEY `id` (`id`),
KEY `index_id` (`id`)
) TYPE=MyISAM;


Et il ne me renvoi d'erreur que pour l'ip de destination ip_daddr et rien pour l'ip source, pourtant configurer de la même manière... Smiley murf
Salut,

Tu dis à mysql que des champs varchar ne sont pas signés !Tu ne peux le dire que pour des nombres, un texte n'est pas négatif ou positif... Donc retire ton unsigned sur tes champs varchar

EDIT: Tu peux mettre un unsigned sur des nombre pour avoir une plage de nombre plus importante ex :
a écrit :
TINYINT[(M)] [UNSIGNED] [ZEROFILL]
#1 octet
#Très petit entier. Va de -128 à 127, de 0 à 255 si non signé

Modifié par N-J (24 Aug 2009 - 15:36)
Okiii Smiley lol
Ha oui en effet ça marche mieux comme ça, j'avai jamais compris a quoi il servait cet unsigned Smiley confused

Merci
Hum, va falloir apprendre à interpréter les erreurs MySQL aussi. L'erreur ne te dit pas qu'elle est sur le champ ip_daddr mais que l'erreur débute à l'endroit du morceau de la requête qu'il t'affiche, donc sur le unsigned juste avant.
Par contre toujours le même problème Smiley confus

Les Ips conrespondant respectivement à 192.168.2.11 et 192.168.2.5 s'enregistrent 3232236043 et 3232236037

cet etrange
Agylus a écrit :
Hum, va falloir apprendre à interpréter les erreurs MySQL aussi. L'erreur ne te dit pas qu'elle est sur le champ ip_daddr mais que l'erreur débute à l'endroit du morceau de la requête qu'il t'affiche, donc sur le unsigned juste avant.


Smiley confused Comprend pas trop trop l'anglais, mais c'est vrais qu'il serait temps que je me mette a niveau sur les bdd sql, c'est tout de même utile Smiley biggol
(Quand ça fonctionne comme on veut)
Tu as bien mis des ' ' autour de ton adresse lors de l'insertion ? Parce que sinon il fait le calcul Smiley cligne . Donc du genre :


INSERT INTO nom_de_table (ip) VALUES('$ip');
Bonjour

Non c'est très bien comme ça. Mysql a très bien compris que tu lui donnais une adresse ip.

Tu remarqueras que : 192*168*2*11 = 709632 et non 3232236043

en faite il converti de l'héxa au décimal. Ce qui va te permettre d'avoir une bonne base de donnée (rapide et efficace en INT et non en varchar).

il fait ceci
192*2^24+168*2^16+2*2^8+11 = 3232236043

un chiffre est plus facilement stockable qu'une chaine.

ce qui prend la place de 4 octets et non 15 (suivant l'encodage)
Modifié par masseuro (24 Aug 2009 - 16:24)
masseuro a écrit :
Bonjour

Non c'est très bien comme ça. Mysql a très bien compris que tu lui donnais une adresse ip.

Tu remarqueras que : 192*168*2*11 = 709632 et non 3232236043

en faite il converti de l'héxa au décimal. Ce qui va te permettre d'avoir une bonne base de donnée (rapide et efficace en INT et non en varchar).

il fait ceci
192*2^24+168*2^16+2*2^8+11 = 3232236043

un chiffre est plus facilement stockable qu'une chaine.

ce qui prend la place de 4 octets et non 15 (suivant l'encodage)



Bon à savoir Smiley cligne
Ha... ben c'est plutôt sympa en fait.

Mais comment est-ce que je pourrai l'afficher correctement sur ma page web ducoup?
Smiley sweatdrop

Sinon merci beaucoup voila un point déjà bien éclairci Smiley ravi