Comment fonctionne la commande IT_MyTCPAddr?

Dans le but de me passer complètement du plugin INTERNET COMMANDE en v18, je cherche à remplacer la commande IT_MyTCPAddr.

Mais comment fonctionne-elle exactement ?

Que ce passe t’il sur un Mac qui possède 2 (voir plus) adresses IP (WIFI et ETHERNET, etc…)

Je pense utiliser la commande 4D https://doc.4d.com/4Dv18/4D/18/Lire-information-systeme.301-4505604.fr.htmlLire information systeme>
Faut-il forcer le choix sur networkInterfaces.type=“ethernet” :?:

J’ai eu ce souci récemment, Lire informations système, c’est un vrai catalogue. Comme mon besoin exact était “est-ce que le poste courant a l’IP x.x.x.x”, où x.x.x.x est une IP connue (celle du serveur), j’ai résolu comme ça :
<code 4D>
//BaseDeProduction -> bool
c_boolean($0)
$IP_t:=“x.x.x.x” //adresse IP du serveur de production
$networkInterface_c:=Get system info.networkInterfaces.query(“ipAddresses[].ip = :1”;$IP_t)
$0:=($networkInterface_c.length>0) //adresse trouvée
</code 4D>

Pas compliqué, en fait, c’est juste “est-ce que l’adresse que je cherche est dans le tas ?”

Quand plusieurs interfaces sont possibles, je pense que le système donne la priorité à la “meilleure” (ethernet > wifi, par exemple) et que les IC retournait cette “meilleure”. Ça doit pouvoir se vérifier, lire avec les IC et comparer avec Get system info…

Malheureusement, sur Mac il y a myriades de possibilités (Ethernet, Wifi, Bluetooth, FireWire, etc.)

Du coup, j’ai pondu ce code qui me convient pour l’instant.

<code 4D>
// Méthode : TBM_MyIP
// Description
// Retourne l’adresse IP v4 du poste
// en priorité l’adresse Ethernet sinon Wifi sinon rien
// Paramètres
// ----------------------------------------------------
C_TEXTE($0;$MyIP)

C_OBJET($systemInfo)
$systemInfo:=Lire information système

C_COLLECTION($InterfacesReseau)
$InterfacesReseau:=$systemInfo.networkInterfaces

Si ($InterfacesReseau#Null)
Si ($InterfacesReseau.length#0)
C_COLLECTION($InterfacesReseauEthernet)
$InterfacesReseauEthernet:=$InterfacesReseau.query(“type = :1”;“ethernet”)
Si ($InterfacesReseauEthernet#Null)
C_COLLECTION($InterfacesReseauEthernetIPv4)
$InterfacesReseauEthernetIPv4:=$InterfacesReseauEthernet[0].ipAddresses.query(“type = :1”;“ipv4”)
Si ($InterfacesReseauEthernetIPv4#Null)
$MyIP:=$InterfacesReseauEthernetIPv4[0].ip
fin de si
Fin de si

	Si ($MyIP="")
		C_COLLECTION($InterfacesReseauWifi)
		$InterfacesReseauWifi:=$InterfacesReseau.query("type = :1";"wifi")
		Si ($InterfacesReseauWifi#Null)
			C_COLLECTION($InterfacesReseauWifiIPv4)
			$InterfacesReseauWifiIPv4:=$InterfacesReseauEthernet[0].ipAddresses.query("type = :1";"ipv4")
			Si ($InterfacesReseauWifiIPv4#Null)
				$MyIP:=$InterfacesReseauWifiIPv4[0].ip
			Fin de si 
		Fin de si 
	Fin de si
	
Fin de si 

Fin de si

$0:=$MyIP

</code 4D>