<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0">
  <channel>
    <title>DLFP - Entrées de forums de switcher</title>
    <link>http://linuxfr.org/~switcher/</link>
     
    <description>LinuxFr</description>
    <language>fr</language>
    <image>
      <title>DLFP - Entrées de forums de switcher</title>
      <link>http://linuxfr.org/~switcher/</link>
      <url>http://linuxfr.org/images/favicon.png</url>
    </image>
    <ttl>30</ttl>
    

    <item>
      <title>
	Manipulation de clé</title>
      <author>null@linuxfr.org (switcher)</author>
      <pubDate>Wed, 09 Apr 2008 12:08:39 +0200</pubDate>
      <link>http://linuxfr.org/forums/19/24470.html</link>
      <guid>http://linuxfr.org/forums/19/24470.html</guid>
      <category>c</category>
      <description>
	Bonjour à tous,&lt;br /&gt;
&lt;br /&gt;
Durant mon temps libre, je bidouille en C et en crypto et je me demandais comment gérer directement (sans passer par des librairies telles GMP) des clés de 256 bits. J'entend par la générer ces clés, les stocker et les manipuler (faire des XOR avec un bloc de texte par exemple).&lt;br /&gt;
&lt;br /&gt;
J'imagine que cela doit passer par des tableaux, mais n'étant pas expert dans le domaine, j'aurais voulu avoir un peu de doc sur le sujet.&lt;br /&gt;
&lt;br /&gt;
Note : inutile de me renvoyer vers les codes sources d'openssl et gmp, j'y suis déjà allé mais ils sont trop complexes pour être compris rapidement.&lt;br /&gt;
&lt;br /&gt;
Merci,&lt;br /&gt;
Julien</description>
    </item>
    <item>
      <title>Probleme de calcul du Checksum TCP</title>
      <author>null@linuxfr.org (switcher)</author>
      <pubDate>Tue, 24 Jul 2007 21:47:14 +0200</pubDate>
      <link>http://linuxfr.org/forums/19/22662.html</link>
      <guid>http://linuxfr.org/forums/19/22662.html</guid>
      <category>c</category>
      <description>Bonjour a tous,&lt;br /&gt;
&lt;br /&gt;
je fabrique mes propres paquets TCP et j'ai du mal a calculer le checksum&lt;br /&gt;
&lt;br /&gt;
je cree le pseudo header comme ca :&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
struct pseudo_header&lt;br /&gt;
{&lt;br /&gt;
	unsigned long saddr, daddr; 	/*! src/dst IP addresses */&lt;br /&gt;
	char mbz;&lt;br /&gt;
	unsigned char ptcl;	/*! protocol (tcp = 6, udp = 17) */&lt;br /&gt;
	unsigned short tcpl;	/*! length (tcp header + payload)*/&lt;br /&gt;
};&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
ma fonction checksum est la suivante&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
int checksum (unsigned short *buf, int nwords)&lt;br /&gt;
{&lt;br /&gt;
	unsigned long sum;&lt;br /&gt;
	for (sum = 0; nwords &amp;gt; 0; nwords--)&lt;br /&gt;
		sum += *buf++;&lt;br /&gt;
	sum = (sum &amp;gt;&amp;gt; 16) + (sum &amp;amp; 0xffff);&lt;br /&gt;
	sum += (sum &amp;gt;&amp;gt; 16);&lt;br /&gt;
	return ~sum;&lt;br /&gt;
}&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
et le tout est appele de la facon suivante&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
/*! ******************* &lt;br /&gt;
		 * compute TCP checksum&lt;br /&gt;
		 * ********************&lt;br /&gt;
		 */&lt;br /&gt;
		int PSEUDO_SIZE = /*! 12 = size of the pseudoheader */&lt;br /&gt;
				PAYLOAD_SIZE + (replay_tcp-&amp;gt;doff*4) + 12;&lt;br /&gt;
		&lt;br /&gt;
		char pseudo_tcp[ PSEUDO_SIZE ]; &lt;br /&gt;
&lt;br /&gt;
		/*! fill up the pseudo header&lt;br /&gt;
		 */&lt;br /&gt;
		struct pseudo_header *ph;&lt;br /&gt;
&lt;br /&gt;
		ph-&amp;gt;saddr = iph-&amp;gt;saddr;&lt;br /&gt;
		ph-&amp;gt;daddr = iph-&amp;gt;daddr;&lt;br /&gt;
		ph-&amp;gt;mbz = 0;&lt;br /&gt;
		ph-&amp;gt;ptcl = 6;&lt;br /&gt;
		ph-&amp;gt;tcpl = htons(PSEUDO_SIZE - 12);&lt;br /&gt;
		&lt;br /&gt;
		replay_tcp-&amp;gt;check = 0;&lt;br /&gt;
		&lt;br /&gt;
		memcpy(pseudo_tcp, (char *) ph, 12);&lt;br /&gt;
		memcpy(pseudo_tcp + 12, (char *) replay_tcp, PSEUDO_SIZE - 12);&lt;br /&gt;
		&lt;br /&gt;
		/*! compute the checksum and store it in the TCP structure&lt;br /&gt;
		 */&lt;br /&gt;
		replay_tcp-&amp;gt;check = checksum((unsigned short*) pseudo_tcp, PSEUDO_SIZE );&lt;br /&gt;
		replay_tcp-&amp;gt;check = checksum((unsigned short*) pseudo_tcp, PSEUDO_SIZE );&lt;br /&gt;
		&lt;br /&gt;
		g_print(&quot;%x\n&quot;, ntohs(checksum((unsigned short*) pseudo_tcp, PSEUDO_SIZE )));&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
PAYLOAD_SIZE a la bonne valeur (je bosse sur des caracteres ascii pour le moment)&lt;br /&gt;
replay_tcp est bien parse, je le vois dans ethereal&lt;br /&gt;
&lt;br /&gt;
Par contre ethereal me dit toujours que mes checksums sont faux, et effectivement la machine de destination n'accepte pas la connection lorsquelle recoit un SYN&lt;br /&gt;
&lt;br /&gt;
J'ai relu plusieurs fois la RFC et le pseudo header correspond a ce qui est requis. Du coup, je pense que j'ai un probleme avec ma fonction checksum mais comme elle ne viens pas de moi et que je suis pas super a l'aise avec les complements a 1, j'y ai pas retouche......&lt;br /&gt;
&lt;br /&gt;
si quelqu'un a une idee.... :)</description>
    </item>
    <item>
      <title>Galère de pointeurs avec les GArrays</title>
      <author>null@linuxfr.org (switcher)</author>
      <pubDate>Tue, 10 Jul 2007 18:36:28 +0200</pubDate>
      <link>http://linuxfr.org/forums/19/22543.html</link>
      <guid>http://linuxfr.org/forums/19/22543.html</guid>
      <category>c</category>
      <description>Bonjour à tous,&lt;br /&gt;
&lt;br /&gt;
J'ai besoin de stocker les paquets que composent une communications dans un programme C.&lt;br /&gt;
Comme j'ai beaucoup de communications, j'ai commencé par faire un B-Tree dans lequel chaque valeur (associée à une clé) est un GArray qui contient les paquets de la communication.&lt;br /&gt;
&lt;br /&gt;
Le soucis, c'est que ça bug... les 2 premiers paquets de chaque com. sont bien enregistrés et repris, mais pour les suivants j'ai des résultats bizarres...&lt;br /&gt;
&lt;br /&gt;
voilà mon code :&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
		/*!******************************&lt;br /&gt;
		 * 				*&lt;br /&gt;
		 * 	search the entry	*&lt;br /&gt;
		 * 				*&lt;br /&gt;
		 * ******************************/&lt;br /&gt;
		if (&lt;br /&gt;
		    	TRUE != g_tree_lookup_extended(Storing_B_Tree, key_one-&amp;gt;str, NULL, NULL)&lt;br /&gt;
				  &amp;amp;&amp;amp;&lt;br /&gt;
			TRUE != g_tree_lookup_extended(Storing_B_Tree, key_two-&amp;gt;str, NULL, NULL)&lt;br /&gt;
		   )&lt;br /&gt;
		{&lt;br /&gt;
			/*! if doesn't exist, create it and init the GArray&lt;br /&gt;
			 * as a value for this entry&lt;br /&gt;
			 */&lt;br /&gt;
			GArray *value;&lt;br /&gt;
&lt;br /&gt;
			/*! Creates a new GArray as a B-Tree value to store the packets of this connection&lt;br /&gt;
			 */&lt;br /&gt;
			value = g_array_new(FALSE, FALSE, 1500);&lt;br /&gt;
&lt;br /&gt;
			g_array_append_val(value, m-&amp;gt;payload);&lt;br /&gt;
&lt;br /&gt;
			/*! add it to the tree, value contain the address of the pointer to the array in the memory&lt;br /&gt;
			 */&lt;br /&gt;
			g_tree_insert(Storing_B_Tree, key_one-&amp;gt;str, value);&lt;br /&gt;
			&lt;br /&gt;
			g_print(&quot;STORING FUNCTION : entry created and packet %s stored in memory\n&quot;,key_one-&amp;gt;str);&lt;br /&gt;
&lt;br /&gt;
		}&lt;br /&gt;
		else {&lt;br /&gt;
			/*! the tuple exist in the B-Tree, so add the packet at the end of the &lt;br /&gt;
			 * existing GArray table&lt;br /&gt;
			 */&lt;br /&gt;
			GString *key;&lt;br /&gt;
			key = key_one;&lt;br /&gt;
&lt;br /&gt;
			GArray *P_to_Array;&lt;br /&gt;
											      /*! get @ of the array in memory */&lt;br /&gt;
			if (TRUE != g_tree_lookup_extended(Storing_B_Tree, key_one-&amp;gt;str, NULL, (gpointer *) &amp;amp;P_to_Array))&lt;br /&gt;
			{&lt;br /&gt;
				/*! if key_one is not the good key, try with key_two */&lt;br /&gt;
				g_tree_lookup_extended(Storing_B_Tree, key_two-&amp;gt;str, NULL,(gpointer *) &amp;amp;P_to_Array);&lt;br /&gt;
				key = key_two;&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			/*! store the value at the end of the GArray table&lt;br /&gt;
			 */			&lt;br /&gt;
			g_array_append_val(P_to_Array, m-&amp;gt;payload);&lt;br /&gt;
			&lt;br /&gt;
			g_print(&quot;STORING FUNCTION : %dst packet of %s stored in memory\n&quot;,P_to_Array-&amp;gt;len, key-&amp;gt;str);&lt;br /&gt;
&lt;br /&gt;
			/*! TEST PURPOSE&lt;br /&gt;
			 *&lt;br /&gt;
			 * print all the entries from the corresponding array&lt;br /&gt;
			 */&lt;br /&gt;
			int i;&lt;br /&gt;
&lt;br /&gt;
			for (i=0; i &amp;lt; P_to_Array-&amp;gt;len; i++)&lt;br /&gt;
			{&lt;br /&gt;
				struct iphdr *iph2;&lt;br /&gt;
				&lt;br /&gt;
				iph2 = &amp;amp; g_array_index(P_to_Array, struct iphdr *, i);&lt;br /&gt;
&lt;br /&gt;
				g_print(&quot;IP table: %s; length : %u\n&quot;,(char *) inet_ntoa(iph2-&amp;gt;saddr), ntohs(iph2-&amp;gt;tot_len));&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		}&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
et voila ce que donne une exécution, les 2 premières IP sont bien reprises mais les suivantes ne sont pas bonnes&lt;br /&gt;
dans le second paquet, la &quot;length&quot; est également fausse...&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
STORING FUNCTION : 4st packet of 128.8.37.122:56107:130.92.6.40:80 stored in memory&lt;br /&gt;
IP table: 128.8.37.122; length : 52&lt;br /&gt;
IP table: 130.92.6.40; length : 16384&lt;br /&gt;
IP table: 219.43.0.80; length : 52160&lt;br /&gt;
IP table: 15.53.67.83; length : 9594&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
Alors j'essaie de comprendre pourquoi je ne récupère pas bien mes paquets.... Il me semble que GArray attribue un nouvel index pour chaque entrée, je ne devrais donc pas dépasser sur les autres index lorsque je récupère mon entrée...</description>
    </item>
    <item>
      <title>Glib et les Binary Trees</title>
      <author>null@linuxfr.org (switcher)</author>
      <pubDate>Thu, 28 Jun 2007 14:23:38 +0200</pubDate>
      <link>http://linuxfr.org/forums/19/22425.html</link>
      <guid>http://linuxfr.org/forums/19/22425.html</guid>
      <category>c</category>
      <description>Bonjour à tous,&lt;br /&gt;
&lt;br /&gt;
j'essaie d'utiliser les fonctions B-Tree qu'offre Glib mais je rencontre quelques petits soucis.&lt;br /&gt;
En fait, j'ajoute des valeurs à la chaine dans un B-Tree et quand je lookup ces valeurs, elles ont disparues... seule reste la dernière ajoutée...&lt;br /&gt;
&lt;br /&gt;
voilà mon code :&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
#include &amp;lt;glib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
GTree * redirected_connections;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char **argv)&lt;br /&gt;
{&lt;br /&gt;
	redirected_connections = g_tree_new((GCompareDataFunc)strcmp);&lt;br /&gt;
&lt;br /&gt;
	int i;&lt;br /&gt;
	for (i=1; i &amp;lt; 250; i++)&lt;br /&gt;
	{&lt;br /&gt;
		int value = (i * i);&lt;br /&gt;
&lt;br /&gt;
		gchar intkey[4];&lt;br /&gt;
		snprintf(intkey,4, &quot;%d&quot;, i);&lt;br /&gt;
&lt;br /&gt;
		gchar intval[6];&lt;br /&gt;
		snprintf(intval,6, &quot;%d&quot;, value);&lt;br /&gt;
&lt;br /&gt;
		fprintf(stdout, &quot;add %s:%s\n&quot;,intkey, intval );&lt;br /&gt;
		g_tree_insert(redirected_connections, intkey, intval);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	for (i=1;i&amp;lt;250;i++)&lt;br /&gt;
	{&lt;br /&gt;
		gchar intkey[4];&lt;br /&gt;
		snprintf(intkey,4, &quot;%d&quot;, i);&lt;br /&gt;
&lt;br /&gt;
		fprintf(stdout, &quot;check value %s:%s\n&quot;, intkey, g_tree_lookup(redirected_connections, intkey));&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	gint numberofnodes = g_tree_nnodes(redirected_connections);&lt;br /&gt;
&lt;br /&gt;
	fprintf(stdout, &quot;# of nodes : %d\n&quot;,numberofnodes);&lt;br /&gt;
&lt;br /&gt;
	g_tree_destroy (redirected_connections);&lt;br /&gt;
}&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
Il se compile chez moi avec la ligne&lt;br /&gt;
&lt;code&gt;gcc -Wall -o test_b-tree test_b-tree.c `pkg-config --cflags --libs glib-2.0`&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Je ne comprend pas pourquoi il m'écrase toutes les autres valeurs, il devrait ajouter une feuille à l'arbre à chaque fois et le ré-équilibrer... au lieu de celà, on dirait qu'il écrase l'arbre &lt;br /&gt;
&lt;br /&gt;
J'ai fait le même type de code avec les Hash Tables de Glib et ça marche parfaitement...&lt;br /&gt;
&lt;br /&gt;
Une idée d'où vient mon erreur ?</description>
    </item>
    <item>
      <title>Makefile et petit soucis de liens</title>
      <author>null@linuxfr.org (switcher)</author>
      <pubDate>Tue, 12 Jun 2007 14:54:40 +0200</pubDate>
      <link>http://linuxfr.org/forums/19/22220.html</link>
      <guid>http://linuxfr.org/forums/19/22220.html</guid>
      <category>c</category>
      <description>Bonjour à tous&lt;br /&gt;
n'étant pas dev de nature, je suis un peu pommé quand à la compilation de mon code.&lt;br /&gt;
Ce dernier se découpe en plusieurs fichiers que je compile dans un makefile.&lt;br /&gt;
Le code utilise glib et lipq, et le problème se situe au niveau de ces librairies.&lt;br /&gt;
Quand arrive la dernière étape de compilation&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
gcc -Wall -pthread -static -lipq `pkg-config --cflags --libs glib-2.0` -o argusproxy-redirector main.o netcode.o intercom.o tables.o&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
je me prend cette liste d'erreurs dans la figure :&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
main.o: In function `die':&lt;br /&gt;
main.c:(.text+0xe): undefined reference to `ipq_perror'&lt;br /&gt;
main.c:(.text+0x19): undefined reference to `ipq_destroy_handle'&lt;br /&gt;
main.o: In function `config_parse':&lt;br /&gt;
main.c:(.text+0x9b): undefined reference to `g_str_equal'&lt;br /&gt;
main.c:(.text+0xa2): undefined reference to `g_str_hash'&lt;br /&gt;
main.c:(.text+0xa7): undefined reference to `g_hash_table'&lt;br /&gt;
main.c:(.text+0x1c6): undefined reference to `g_hash_table_destroy'&lt;br /&gt;
main.c:(.text+0x22f): undefined reference to `g_hash_table_destroy'&lt;br /&gt;
main.c:(.text+0x326): undefined reference to `g_hash_table_destroy'&lt;br /&gt;
main.c:(.text+0x3cd): undefined reference to `g_hash_table_insert'&lt;br /&gt;
main.c:(.text+0x40e): undefined reference to `g_hash_table_destroy'&lt;br /&gt;
main.o: In function `daemonize':&lt;br /&gt;
main.c:(.text+0x559): undefined reference to `g_hash_table_lookup'&lt;br /&gt;
main.o: In function `main':&lt;br /&gt;
main.c:(.text+0x713): undefined reference to `ipq_create_handle'&lt;br /&gt;
main.c:(.text+0x742): undefined reference to `ipq_set_mode'&lt;br /&gt;
main.c:(.text+0x799): undefined reference to `ipq_read'&lt;br /&gt;
main.c:(.text+0x7bb): undefined reference to `ipq_message_type'&lt;br /&gt;
main.c:(.text+0x7e3): undefined reference to `ipq_get_msgerr'&lt;br /&gt;
main.c:(.text+0x816): undefined reference to `ipq_get_packet'&lt;br /&gt;
collect2: ld returned 1 exit status&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
autrement dit, toutes les fonctions liés à glib et lipq se font jeter....&lt;br /&gt;
de quoi cela peut-il venir ?</description>
    </item>
    <item>
      <title>2 actions dans un &quot;die&quot;</title>
      <author>null@linuxfr.org (switcher)</author>
      <pubDate>Wed, 19 Jul 2006 09:55:13 +0200</pubDate>
      <link>http://linuxfr.org/forums/27/17869.html</link>
      <guid>http://linuxfr.org/forums/27/17869.html</guid>
      <category>perl</category>
      <description>Hello,&lt;br /&gt;
&lt;br /&gt;
j'ai un petit soucis avec die : je voudrais que lorsqu'un &quot;open&quot; ne fonctionne pas, die m'écrire et log et sorte avec &quot;-1&quot;&lt;br /&gt;
&lt;br /&gt;
donc j'ai une ligne comme ca :&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
opendir(DSTREPORT,$destreport)or die (meurt(&quot;Impossible d'ouvrir le répertoire $destreport... $!&quot;);return -1);&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
mais il n'en veux pas.... si je ne met que l'appel vers &quot;meurt&quot; ou le &quot;return -1&quot;, ca fonctionne mais pour les deux en meme temps ya pas moyen...&lt;br /&gt;
&lt;br /&gt;
ya t'il une syntaxe particulière que j'ai raté ? ou peut etre une autre facon de le faire...</description>
    </item>
    <item>
      <title>Gtk2 : rafraichissement d'un champ Gtk2::Entry</title>
      <author>null@linuxfr.org (switcher)</author>
      <pubDate>Mon, 17 Jul 2006 09:50:55 +0200</pubDate>
      <link>http://linuxfr.org/forums/27/17830.html</link>
      <guid>http://linuxfr.org/forums/27/17830.html</guid>
      <category>perl</category>
      <description>Bonjour a tous,&lt;br /&gt;
&lt;br /&gt;
je programme actuellement une interface en Gtk2 ou j'utilise des champs de date pour lancer une exploitation de logs entre ces dates.&lt;br /&gt;
&lt;br /&gt;
C'est très simple, j'ai deux champs $datedebut et $datefin qui sont du type Gtk2::Entry-&amp;gt;new_with_max_length(10) et j'ai également un bouton qui appel la fonction &quot;lancer&quot;&lt;br /&gt;
&lt;br /&gt;
dans cette fonction &quot;lancer&quot; je fais mes deux récupérations de valeurs :&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
	my $debut_exp = $datedebut-&amp;gt;get_text(); &lt;br /&gt;
	my $fin_exp = $datefin-&amp;gt;get_text();&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
Celà marche bien. Mais quand mon exploitation est terminée et que je veux en lancer une deuxième, je modifie mes valeurs de date et je clic sur &quot;lancer&quot;. C'est à ce moment que j'ai une erreur :&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
*** unhandled exception in callback:&lt;br /&gt;
***   Can't call method &quot;get_text&quot; without a package or object reference at [CHEMIN VERS MON APPLICATION] line 755.&lt;br /&gt;
***  ignoring at [CHEMIN VERS MON APPLICATION] line 654.&lt;br /&gt;
&lt;br /&gt;
[CHEMIN VERS MON APPLICATION]&amp;gt; Can't call method &quot;get_text&quot; without a package or object reference&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
Je ne vois pas pourquoi Gtk ne réinitialise pas ces valeurs et pourquoi il me renvoie un tel message dans la tronche....&lt;br /&gt;
Si quelqu'un a une idée, je suis preneur</description>
    </item>  </channel>
</rss>
