OVH Cloud OVH Cloud

[WD10] adresse ip

13 réponses
Avatar
jacques trepp
bonjour,

je teste le nombre d'accès simultanés à une appli en gérant une table
nommée 'postes', dans laquelle je stocke l'adresse ip du poste qui se
connecte, jusqu'à la déconnexion. En cas de coupure brutale, je cherche
l'adresse ip du poste qui se connecte, et je l'efface pour ensuite la
ré-enregistrer. Un simple count(*) me permet de savoir si je dépasse ou
pas le nombre maxi d'utilisateurs que j'ai paramétré lors de
l'installation.
le problème est que la commande NetAdresseIP() me renvoie 169.254.2.2
si j'utilise des indices, j'obtiens :
NetAdresseIP(0) = 169.254.2.2
NetAdresseIP(1) = 192.168.220.25 (mon adresse normale)
la première adresse semble automatique (apipa, je crois), mais je ne
veux pas utiliser l'indice 1 car je ne sais pas d'avance si la première
adresse sera présente quelle que soit la configuration du réseau
(serveur de domaine, chez nous) très variable d'un client à l'autre.
Si vous avez une suggestion, je suis preneur

merci



Voici le code :

nbpst est un entier

// recherche de l'adresse ip après un arrêt brutal de l'appli

g_requete = "select count(*) from postes where adresse_ip = " +
MySql4:mysqlquotestring(NetAdresseIP())
g_num_requete = 1
SI Execute_Requete() ALORS
SI MySql4:mysqlfetch(g_num_requete) ALORS
nbpst =MySql4:MysqlLitCol(g_num_requete,1)
SI nbpst >= 1 ALORS
g_requete = "delete from postes where adresse_ip='"+NetAdresseIP()+"'"
g_num_requete = 1
Execute_Requete(Faux)
FIN
FIN
FIN

// enregistrement de l'adresse ip
g_retour = PS:SQLLitRecherche("adresse_ip =
"+MySql4:mysqlquotestring(NetAdresseIP()))
SI PAS g_retour ALORS
PS:m_ADRESSE_IP = NetAdresseIP()
SI PAS PS:SQLInsert() ALORS
Affiche_Erreur(PS)
FIN
FIN

// vérification de la limete d'utilisation
g_requete = "select count(*) from postes"
g_num_requete = 1
SI Execute_Requete() ALORS
SI MySql4:mysqlfetch(g_num_requete) ALORS
nbpst = MySql4:MysqlLitCol(g_num_requete,1)
SI nbpst > gLimite_Postes ALORS
Info("Le nombre d'utilisateurs simultanés est de
"+gLimite_Postes+"."+RC+"Vous devez déconnecter un autre poste pour
pouvoir utiliser le logiciel.")
FinProgramme()
FIN
FIN
FIN




--
Jacques Trepp
Albygest - 81160 - St Juery
jacques-pas de spam.trepp@free.fr
(enlever '-pas de spam' pour me joindre)
http://www.albygest.com

10 réponses

1 2
Avatar
JeAn-PhI
jacques trepp a exposé le 19/09/2006 :
bonjour,

je teste le nombre d'accès simultanés à une appli en gérant une table nommée
'postes', dans laquelle je stocke l'adresse ip du poste qui se connecte,
jusqu'à la déconnexion. En cas de coupure brutale, je cherche l'adresse ip du
poste qui se connecte, et je l'efface pour ensuite la ré-enregistrer. Un
simple count(*) me permet de savoir si je dépasse ou pas le nombre maxi
d'utilisateurs que j'ai paramétré lors de l'installation.
le problème est que la commande NetAdresseIP() me renvoie 169.254.2.2
si j'utilise des indices, j'obtiens :
NetAdresseIP(0) = 169.254.2.2
NetAdresseIP(1) = 192.168.220.25 (mon adresse normale)
la première adresse semble automatique (apipa, je crois), mais je ne veux pas
utiliser l'indice 1 car je ne sais pas d'avance si la première adresse sera
présente quelle que soit la configuration du réseau (serveur de domaine, chez
nous) très variable d'un client à l'autre.
Si vous avez une suggestion, je suis preneur

merci



Voici le code :

nbpst est un entier

// recherche de l'adresse ip après un arrêt brutal de l'appli

g_requete = "select count(*) from postes where adresse_ip = " +
MySql4:mysqlquotestring(NetAdresseIP())
g_num_requete = 1
SI Execute_Requete() ALORS
SI MySql4:mysqlfetch(g_num_requete) ALORS
nbpst =MySql4:MysqlLitCol(g_num_requete,1)
SI nbpst >= 1 ALORS
g_requete = "delete from postes where adresse_ip='"+NetAdresseIP()+"'"
g_num_requete = 1
Execute_Requete(Faux)
FIN
FIN
FIN

// enregistrement de l'adresse ip
g_retour = PS:SQLLitRecherche("adresse_ip =
"+MySql4:mysqlquotestring(NetAdresseIP()))
SI PAS g_retour ALORS
PS:m_ADRESSE_IP = NetAdresseIP()
SI PAS PS:SQLInsert() ALORS
Affiche_Erreur(PS)
FIN
FIN

// vérification de la limete d'utilisation
g_requete = "select count(*) from postes"
g_num_requete = 1
SI Execute_Requete() ALORS
SI MySql4:mysqlfetch(g_num_requete) ALORS
nbpst = MySql4:MysqlLitCol(g_num_requete,1)
SI nbpst > gLimite_Postes ALORS
Info("Le nombre d'utilisateurs simultanés est de
"+gLimite_Postes+"."+RC+"Vous devez déconnecter un autre poste pour pouvoir
utiliser le logiciel.")
FinProgramme()
FIN
FIN
FIN


szAdrIP est chaine
si NetAdresseIP(1) <> "" alors
szAdrIP = NetAdresseIP(1)
sinon
szAdrIP = NetAdresseIP()
fin
et utiliser la var szAdrIP dans vos traitement

--
Cordialement JeAn-PhI
Avatar
jacques trepp
JeAn-PhI a écrit :


szAdrIP est chaine
si NetAdresseIP(1) <> "" alors
szAdrIP = NetAdresseIP(1)
sinon
szAdrIP = NetAdresseIP()
fin
et utiliser la var szAdrIP dans vos traitement



Riche idée, effectivement. :)
Je vais tester avec ça. Il s'avère que l'adresse 169.254.2.2 est en fait
une pseudo carte réseau windows mobile générée par Activesync lors de
son installation. Ce qui est bizarre, c'est l'ordre d'apparition à
l'écran ( :) ).
J'aurais pensé que l'adresse de la carte réseau du pc serait affiché an
premier. Il est vrai que j'obtiens cette adresse d'un serveur dhcp.

Merci, en tous cas.

--
Jacques Trepp
Albygest - 81160 - St Juery
jacques-pas de
(enlever '-pas de spam' pour me joindre)
http://www.albygest.com
Avatar
Daniel
Bonjour,
jacques trepp writes:

bonjour,

je teste le nombre d'accès simultanés à une appli en gérant une t able
nommée 'postes', dans laquelle je stocke l'adresse ip du poste qui se
connecte, jusqu'à la déconnexion. En cas de coupure brutale, je
cherche l'adresse ip du poste qui se connecte, et je l'efface pour
ensuite la ré-enregistrer. Un simple count(*) me permet de savoir si
je dépasse ou pas le nombre maxi d'utilisateurs que j'ai paramétré
lors de l'installation. le problème est que la commande
NetAdresseIP() me renvoie 169.254.2.2 si j'utilise des indices,
j'obtiens : NetAdresseIP(0) = 169.254.2.2 NetAdresseIP(1) =
192.168.220.25 (mon adresse normale) la première adresse semble
automatique (apipa, je crois), mais je ne veux pas utiliser l'indice 1
car je ne sais pas d'avance si la première adresse sera présente
quelle que soit la configuration du réseau (serveur de domaine, chez
nous) très variable d'un client à l'autre. Si vous avez une
suggestion, je suis preneur

merci




as tu essayé de récupérer l'adresse de l'host sur ton serveur MySql.
En faisant un MySql4:mysqlexec("show processlist",1) dans ce cas tu as
l'info que tu veux dans host




Voici le code :

nbpst est un entier

// recherche de l'adresse ip après un arrêt brutal de l'appli

g_requete = "select count(*) from postes where adresse_ip = " +
MySql4:mysqlquotestring(NetAdresseIP()) g_num_requete = 1 SI
Execute_Requete() ALORS
SI MySql4:mysqlfetch(g_num_requete) ALORS
nbpst =MySql4:MysqlLitCol(g_num_requete,1)
SI nbpst >= 1 ALORS
g_requete = "delete from postes where
adresse_ip='"+NetAdresseIP()+"'"
g_num_requete = 1
Execute_Requete(Faux)
FIN
FIN FIN

// enregistrement de l'adresse ip g_retour =
PS:SQLLitRecherche("adresse_ip =
"+MySql4:mysqlquotestring(NetAdresseIP())) SI PAS g_retour ALORS
PS:m_ADRESSE_IP = NetAdresseIP()
SI PAS PS:SQLInsert() ALORS
Affiche_Erreur(PS)
FIN FIN

// vérification de la limete d'utilisation g_requete = "select
count(*) from postes" g_num_requete = 1 SI Execute_Requete() ALORS
SI MySql4:mysqlfetch(g_num_requete) ALORS
nbpst = MySql4:MysqlLitCol(g_num_requete,1)
SI nbpst > gLimite_Postes ALORS
Info("Le nombre d'utilisateurs simultanés est
de "+gLimite_Postes+"."+RC+"Vous devez déconnecter un autre poste pour
pouvoir utiliser le logiciel.")
FinProgramme()
FIN
FIN FIN




--
Jacques Trepp
Albygest - 81160 - St Juery
jacques-pas de
(enlever '-pas de spam' pour me joindre)
http://www.albygest.com



--
suivre ce lien pour répondre:
http://cerbermail.com/?2KrV3YZXnn
Daniel
;-)
Avatar
jacques trepp
Daniel a écrit :


as tu essayé de récupérer l'adresse de l'host sur ton serveur MySql.
En faisant un MySql4:mysqlexec("show processlist",1) dans ce cas tu as
l'info que tu veux dans host




Bonjour Daniel,

Je suis en Postgresql, et la commande en question ne lui plait pas du
tout. :)
je vais quand même chercher, mais tu connais la complexité des tables
système dans postgresql. Rien que pour faire un show create table, c'est
coton... :)

mais quand on aime, on ne compte pas.

A bientôt.
Merci


--
Jacques Trepp
Albygest - 81160 - St Juery
jacques-pas de
(enlever '-pas de spam' pour me joindre)
http://www.albygest.com
Avatar
Daniel
Rebonjour,
jacques trepp writes:

Daniel a écrit :

> as tu essayé de récupérer l'adresse de l'host sur ton serveur MyS ql.
>En faisant un MySql4:mysqlexec("show processlist",1) dans ce cas tu
>as l'info que tu veux dans host
>

Bonjour Daniel,

Je suis en Postgresql, et la commande en question ne lui plait pas du
tout. :) je vais quand même chercher, mais tu connais la complexité
des tables système dans postgresql. Rien que pour faire un show create
table, c'est coton... :)




Je rêve, j'ai dû faire un effort de mémoire pour retrouver la commande
sous MySQL car j'avais vu MySQL4:mysqlexec!!!

La commande postgresql je l'avais sous la main!
XP_base est le nom de la base
la table qui est intéressante dans ton cas est pg_stat_activity

CONSQL:mySQLExec("select count(distinct(client_addr)) from pg_stat_activity where datname='"+XP_Base+"'",3)


@+

mais quand on aime, on ne compte pas.

A bientôt. Merci


--
Jacques Trepp
Albygest - 81160 - St Juery
jacques-pas de
(enlever '-pas de spam' pour me joindre)
http://www.albygest.com



--
suivre ce lien pour répondre:
http://cerbermail.com/?2KrV3YZXnn
Daniel
;-)
Avatar
JeAn-PhI
jacques trepp a écrit :
JeAn-PhI a écrit :


szAdrIP est chaine
si NetAdresseIP(1) <> "" alors
szAdrIP = NetAdresseIP(1)
sinon
szAdrIP = NetAdresseIP()
fin
et utiliser la var szAdrIP dans vos traitement



Riche idée, effectivement. :)
Je vais tester avec ça. Il s'avère que l'adresse 169.254.2.2 est en fait une
pseudo carte réseau windows mobile générée par Activesync lors de son
installation. Ce qui est bizarre, c'est l'ordre d'apparition à l'écran ( :)
).
J'aurais pensé que l'adresse de la carte réseau du pc serait affiché an
premier. Il est vrai que j'obtiens cette adresse d'un serveur dhcp.

Merci, en tous cas.



justement j'ai le pb avec un PDA sous Windows Mobile 5 qui lorsqu'il
est connecté créer une carte réseau virtuelle et donc une ip et prend
le pas sur la carte réseau du pc

--
Cordialement JeAn-PhI
Avatar
jacques trepp
Daniel a écrit :

Je rêve, j'ai dû faire un effort de mémoire pour retrouver la commande
sous MySQL car j'avais vu MySQL4:mysqlexec!!!

La commande postgresql je l'avais sous la main!
XP_base est le nom de la base
la table qui est intéressante dans ton cas est pg_stat_activity

CONSQL:mySQLExec("select count(distinct(client_addr)) from pg_stat_activity where datname='"+XP_Base+"'",3)




Salut Daniel,
si j'ai bien compris, la requète doit me retourner le nombre
d'utilisateurs connectés ?
Le serveur ne me renvoie rien avec cette séquence, pas plus d'ailleurs
en faisant :
select client_addr from pg_stat_activity where datname='mabase'
y compris avec pdadminIII.
bizarrement, je ne trouve cette table nulle part, pourtant, la requète
me retourne les colonnes de la table (vides pour le moment). Pourtant,
je suis obligatoirement connecté sur le serveur en ouvrant une connexion
dans pgadmin, non ?
euh... encore plus bizarre : ça fonctionne sur mon serveur local windows
(version 8.1.3) mais pas sur mon serveur linux (8.1.3) !
c'est normal, Docteur ?

merci



--
Jacques Trepp
Albygest - 81160 - St Juery
jacques-pas de
(enlever '-pas de spam' pour me joindre)
http://www.albygest.com
Avatar
Daniel
Bonjour Jacques,
jacques trepp writes:

Daniel a écrit :
> Je rêve, j'ai dû faire un effort de mémoire pour retrouver la
>commande sous MySQL car j'avais vu MySQL4:mysqlexec!!! La commande
>postgresql je l'avais sous la main! XP_base est le nom de la base la
>table qui est intéressante dans ton cas est pg_stat_activity
>CONSQL:mySQLExec("select count(distinct(client_addr)) from
>pg_stat_activity where datname='"+XP_Base+"'",3)

Salut Daniel, si j'ai bien compris, la requète doit me retourner le
nombre d'utilisateurs connectés ? Le serveur ne me renvoie rien avec
cette séquence, pas plus d'ailleurs en faisant : select client_addr
from pg_stat_activity where datname='mabase' y compris avec
pdadminIII.



fait un :
select * from pg_stat_activity

dans ce cas tu as toutes les infos que tu cherches.

pg_stat_activity est une vue.

elle se trouve dans la base postgres/schema/pg_catalogue/vue

Penser à activer l'option "Afficher les objets Systèmes" dans le menu
de PGAdmin3 sinon effectivement elle n'est pas visible.



bizarrement, je ne trouve cette table nulle part,
pourtant, la requète me retourne les colonnes de la table (vides pour
le moment). Pourtant, je suis obligatoirement connecté sur le serveur
en ouvrant une connexion dans pgadmin, non ? euh... encore plus
bizarre : ça fonctionne sur mon serveur local windows (version 8.1.3)
mais pas sur mon serveur linux (8.1.3) ! c'est normal, Docteur ?



Cela ressemble à un problème de droit.
Essaie en activant l'option avec PGADMIN et tu verras si tu as accès
ou pas à cette vue.


merci



--
Jacques Trepp
Albygest - 81160 - St Juery
jacques-pas de
(enlever '-pas de spam' pour me joindre)
http://www.albygest.com



--
suivre ce lien pour répondre:
http://cerbermail.com/?2KrV3YZXnn
Daniel
;-)
Avatar
jacques trepp
Daniel a écrit :
Bonjour Jacques,
jacques trepp writes:


Daniel a écrit :

Je rêve, j'ai dû faire un effort de mémoire pour retrouver la
commande sous MySQL car j'avais vu MySQL4:mysqlexec!!! La commande
postgresql je l'avais sous la main! XP_base est le nom de la base la
table qui est intéressante dans ton cas est pg_stat_activity
CONSQL:mySQLExec("select count(distinct(client_addr)) from
pg_stat_activity where datname='"+XP_Base+"'",3)



Salut Daniel, si j'ai bien compris, la requète doit me retourner le
nombre d'utilisateurs connectés ? Le serveur ne me renvoie rien avec
cette séquence, pas plus d'ailleurs en faisant : select client_addr
from pg_stat_activity where datname='mabase' y compris avec
pdadminIII.




fait un :
select * from pg_stat_activity

dans ce cas tu as toutes les infos que tu cherches.

pg_stat_activity est une vue.

elle se trouve dans la base postgres/schema/pg_catalogue/vue

Penser à activer l'option "Afficher les objets Systèmes" dans le menu
de PGAdmin3 sinon effectivement elle n'est pas visible.



tout cela est fait. J'ai effectivement trouvé la table dans les vues.

Cela ressemble à un problème de droit.
Essaie en activant l'option avec PGADMIN et tu verras si tu as accès
ou pas à cette vue.




je suis loggé avec le user postgres, propriétaire des tables. La table a
un GRANT SELECT to public.
j'ai ajouté un GRANT ALL.
rien n'y fait. Le plus étonnant, c'est que j'ai acces à toutes les
autres vues. Comme si la stat activity n'était pas activée sous linux.

merci


--
Jacques Trepp
Albygest - 81160 - St Juery
jacques-pas de
(enlever '-pas de spam' pour me joindre)
http://www.albygest.com
Avatar
Daniel
jacques trepp writes:

Daniel a écrit :
> Bonjour Jacques, jacques trepp writes:
>
>>Daniel a écrit :
>>
>>>Je rêve, j'ai dû faire un effort de mémoire pour retrouver la
>>>commande sous MySQL car j'avais vu MySQL4:mysqlexec!!! La commande
>>>postgresql je l'avais sous la main! XP_base est le nom de la base
>>>la table qui est intéressante dans ton cas est pg_stat_activity
>>>CONSQL:mySQLExec("select count(distinct(client_addr)) from
>>>pg_stat_activity where datname='"+XP_Base+"'",3)
>> Salut Daniel, si j'ai bien compris, la requète doit me retourner le
>>nombre d'utilisateurs connectés ? Le serveur ne me renvoie rien
>>avec cette séquence, pas plus d'ailleurs en faisant : select
>>client_addr from pg_stat_activity where datname='mabase' y compris
>>avec pdadminIII.
> fait un : select * from pg_stat_activity dans ce cas tu as toutes
>les infos que tu cherches. pg_stat_activity est une vue. elle se
>trouve dans la base postgres/schema/pg_catalogue/vue Penser à activer
>l'option "Afficher les objets Systèmes" dans le menu de PGAdmin3
>sinon effectivement elle n'est pas visible.
>
tout cela est fait. J'ai effectivement trouvé la table dans les vues.
>Cela ressemble à un problème de droit. Essaie en activant l'option
>avec PGADMIN et tu verras si tu as accès ou pas à cette vue.
>

je suis loggé avec le user postgres, propriétaire des tables. La table
a un GRANT SELECT to public. j'ai ajouté un GRANT ALL. rien n'y
fait. Le plus étonnant, c'est que j'ai acces à toutes les autres
vues. Comme si la stat activity n'était pas activée sous linux.




Je viens de tester sur Linux, sur un postgresql 8.1 j'ai bien la vue,
et donc pas de souci pour avoir les infos.

A la limite, si elle n'existe pas sur ta version tu la crées, en
récupérant le code SQL de la vue dans la version qui fonctionne, ou,
encore mieux tu te fais ta propre vue pg_stat_retraite ;-)





--
Jacques Trepp
Albygest - 81160 - St Juery
jacques-pas de
(enlever '-pas de spam' pour me joindre)
http://www.albygest.com



--
suivre ce lien pour répondre:
http://cerbermail.com/?2KrV3YZXnn
Daniel
;-)
1 2