|
| [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 |
| |
| |
| | | |
|
| | | | |
| | |
|