PDA

Bekijk Volledige Versie : Alle IP's ophalen via API



dupondje
18/03/10, 13:55
Ik ben bezig een script aan het maken die checked of domeinnamen op server nog verwijzen naar de server zelf.

Hiervoor moet ik een lijst ophalen van ALLE ip's, ook die van resellers op de server. Maar dat is via de API niet mogelijk?

CMD_API_SHOW_RESELLER_IPS geeft met 1 IP, de 6 andere gelinkt aan een reseller toont hij niet :(

CMD_API_SHOW_RESELLER_IPS?action=all geeft wat meer informatie over dat 1ne IP, maar niet over de andere :(

Iemand een idee hoe ik makkelijk alle IP's kan ophalen ?

systemdeveloper
18/03/10, 18:27
gemakkelijk is relatief, maar als je het het zonder DA wilt doen en gewoon de interfaces uitlezen kun je dit maybe gebruiken"



#include <net/if.h>
#include <ifaddrs.h>
#include <errno.h>

int main(int argc, char *argv[]) {
struct ifaddrs *myaddrs, *ifa;
struct sockaddr_in *s4;
struct sockaddr_in6 *s6;
int status;
char buf[64];

status = getifaddrs(&myaddrs);
if (status != 0){
perror("getifaddrs");
exit(1);
}

for (ifa = myaddrs; ifa != NULL; ifa = ifa->ifa_next){
if (ifa->ifa_addr == NULL) continue;
/* if ((ifa->ifa_flags & IFF_UP) == 0) continue; */

if (ifa->ifa_addr->sa_family == AF_INET) {
s4 = (struct sockaddr_in *)(ifa->ifa_addr);
if (inet_ntop(ifa->ifa_addr->sa_family, (void *)&(s4->sin_addr), buf, sizeof(buf)) == NULL) {
printf("ERROR:%s:inet_ntop failed!", ifa->ifa_name);
} else {
printf("IPV4#%s#%s#", ifa->ifa_name, buf);
s4 = (struct sockaddr_in *)(ifa->ifa_netmask);
if (inet_ntop(ifa->ifa_netmask->sa_family, (void *)&(s4->sin_addr), buf, sizeof(buf)) == NULL){
printf("ERROR#%s#inet_ntop failed!", ifa->ifa_name);
} else {
printf("%s#", buf);
}
s4 = (struct sockaddr_in *)(ifa->ifa_dstaddr);
if (inet_ntop(ifa->ifa_dstaddr->sa_family, (void *)&(s4->sin_addr), buf, sizeof(buf)) == NULL){
printf("ERROR#%s#inet_ntop failed!", ifa->ifa_name);
} else {
printf("%s#", buf);
}
if ((ifa->ifa_flags & IFF_UP) == 0) {
printf("no carrier");
} else {
printf("active");
}
printf("\n");
}
}
}
freeifaddrs(myaddrs);
exit(0);
}



levert zulke regels op:

IPV4#INTERFACE1#IPADRES1#NETMASK#BROADCAST1#STATUS
IPV4#INTERFACE1#IPADRES2#NETMASK#BROADCAST2#STATUS
...

voor elke virtuele interface. Werkt op FreeBSD prima.

ju5t
18/03/10, 18:53
Hier werkt het wel. Wat krijg je als je naar http://IP:2222/CMD_API_SHOW_RESELLER_IPS gaat (eerst even inloggen, dan de URL in de browser typen)?

Misschien parse je de output verkeerd?

dupondje
18/03/10, 19:07
@systemdeveloper:
Via een script ofzo werkt het inderdaad ook, maar dan vervalt het gemak van gebruik te maken van de API.

@getUP:
Dit toont inderdaad enkel het ene IP (zelfde output als bij API dus)

ju5t
18/03/10, 19:25
Je kunt eventueel ook als admin wat proberen: http://www.directadmin.com/features.php?id=673.

dupondje
18/03/10, 19:30
Je kunt eventueel ook als admin wat proberen: http://www.directadmin.com/features.php?id=673.

Dan krijg ik gewoon de IP manager overview pagina. Niet echt een 'API' functie, want dan kan je evengoed de HTML beginnen te parsen ...

Ofwel doe ik iets verkeerd :)

EDIT:
Ja dus :)
Was niet CMD_IP_MANAGER maar CMD_API_IP_MANAGER :)