Nächste freie IP Adresse per API abrufen?



  • Hallo zusammen,

    weiß jemand ob es möglich ist über die API ( i-doit Version 1.8 ) die nächste freie IP Adresse für ein bestimmtes Subnet abzurufen?

    Viele Grüße, Christian



  • Ich habe mir inzwischen selbst eine Funktion in Python geschrieben. Hier der Code wer's gebrauchen kann:

    
    #!/usr/bin/python
    
    # import modules
    import httplib, json, urllib
    from netaddr import *
    
    # get next unused ip address
    def i_get_next_ip(i_net_id, i_net_title):
            # define parameters
            i_params = ('{"version":"2.0", "id":"1", "method":"cmdb.category.read", "params":{'
                        '"apikey":"' + i_api_key + '", "objID":' + i_net_id + ', "category":"C__CATS__NET_IP_ADDRESSES"}}')
    
            # connect to server
            i_http_conn.connect()
    
            # send POST request
            i_http_conn.request('POST', i_api_url, i_params, i_headers)
    
            # get response
            i_response = json.loads(i_http_conn.getresponse().read())
    
            # close connection
            i_http_conn.close()
    
            # get result list
            i_result_list = i_response['result']
    
            # list of used ip addresses
            i_used_ip_list = []
            if i_result_list:
                    for i in range(len(i_result_list)):
                            i_used_ip = i_result_list[i]['title']
                            if i_used_ip and not i_used_ip in i_used_ip_list:
                                    i_used_ip_list.append(i_used_ip)
    
            # list of unused ip addresses
            subnet_unused_ip_list = []
            for subnet_ip_obj in IPNetwork(i_net_title).iter_hosts():
                    subnet_ip_str = str(subnet_ip_obj)
                    if not subnet_ip_str in i_used_ip_list:
                            subnet_unused_ip_list.append(str(subnet_ip_str))
    
            # first unused ip address
            first_unused_ip = subnet_unused_ip_list[0]
    
            # return value
            return first_unused_ip
    
    # main function
    if __name__ == '__main__':
            # global variables
            i_host = 'idoit.example.com'
            i_headers = {'Content-Type': 'application/json'}
            i_api_url = '/src/jsonrpc.php'
            i_api_key = 'abc123def456'
    
            # instantiate new httplib connection
            i_http_conn = httplib.HTTPConnection(i_host)
    
    	# next unused ip address
    	next_ip = ('42', '192.168.1.0/24')
    
    Die Funktion erwartet die objID des Layer 3 Netzes sowie dessen Bezeichnung, welche den Namen des Netzes im CIDR Format widerspiegeln muss.
    
    Viele Grüße, Christian[/i]
    

  • i-doIT Team

    Hallo Christian,

    danke für das Beispiel! Eine weitere Möglichkeit in PHP ist hier beschrieben:

    https://github.com/bheisig/i-doit-api-client-php#give-me-a-free-ip-address

    Viele Grüße
    Benjamin


 


Datenschutz / Privacy Policy