PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → [WD24] API GetExtendedUdpTable en 64-bits
[WD24] API GetExtendedUdpTable en 64-bits
Iniciado por LouisLegault51, 28,abr. 2019 19:54 - 1 respuesta
Publicado el 28,abril 2019 - 19:54
Bonjour,

Je souhaitais reproduire le résultat de la commande : netstat.exe -a -n | find "UDP", avec l'API GetExtendedUdpTable.

Le code donné par M. Pasquali m'a beaucoup aidé, merci à lui : https://forum.pcsoft.fr/fr-FR/pcsoft.fr.windev/123718-wd15-cherche-savoir-port-4900-tcp-est-ouvert/read.awp

J'ai notamment modifié deux procédures :

- "inet_ntoa" :
Procedure inet_ntoa(nLocalAddr est un entier système)

sAdresse est une chaîne
nAdresse est un entier système

nAdresse = API("ws2_32.dll", "inet_ntoa", nLocalAddr)
SI nAdresse <> 0 ALORS sAdresse = ChaîneRécupère(nAdresse, crAdresseASCIIZ)

RENVOYER sAdresse

- "inet_port" :
Procedure inet_port(nLocalPort est un entier système)

sPort est une chaîne
nPort est un entier système

sPort = NumériqueVersChaîne(nLocalPort, "04X")
nPort = HexaVersEntier(sPort[[3 SUR 2]]) * 256 + HexaVersEntier(sPort[[1 SUR 2]])

RENVOYER nPort

Sur un exécutable compilé en 32-bits, tout fonctionne bien.
En revanche, en 64-bits, la procédure "inet_port" renvoie un numéro de port incohérent.

Comment est-il possible de corriger ce problème ?

Merci,

Cordialement.
Publicado el 29,abril 2019 - 11:41
Bonjour,

Finalement, il est possible d'obtenir le bon port, en 64bits, ainsi :

Procedure inet_port(nLocalPort est un entier système)

sPort est une chaîne
nPort est un entier système

SI EnMode64bits() = Vrai ALORS nLocalPort = nLocalPort / 4294967296

sPort = NumériqueVersChaîne(nLocalPort, "04X")
nPort = HexaVersEntier(sPort[[3 SUR 2]]) * 256 + HexaVersEntier(sPort[[1 SUR 2]])

RENVOYER nPort