ares-scripts/hoipdownload.py
2025-11-22 21:06:17 -08:00

56 lines
1.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from ldap3 import Server, Connection, ALL, SUBTREE
import pandas as pd
# LDAP connection details from the wiki
server_url = 'ldap://207.246.98.219:389' # Server and port (no TLS, as per "TLS Mode: LDAP or No" use 'ldaps://' if TLS needed)
search_base = 'ou=people,dc=hamsoverip,dc=com'
search_filter = '(telephoneNumber=*)' # Fetch all entries with an extension; adjust if needed, e.g., '(objectClass=person)'
attributes = ['cn', 'sn', 'telephoneNumber'] # Key attributes; add more if you discover others like 'callsign'
# Connect anonymously (no auth)
server = Server(server_url, get_info=ALL)
conn = Connection(server, auto_bind=True) # No user/password
# Perform the search
conn.search(
search_base=search_base,
search_filter=search_filter,
search_scope=SUBTREE,
attributes=attributes
)
# Extract data
data = []
for entry in conn.entries:
extension = entry.telephoneNumber.value if 'telephoneNumber' in entry else ''
cn_value = entry.cn.value if 'cn' in entry else ''
sn_value = entry.sn.value if 'sn' in entry else ''
# clean up data
hoipnumber = extension.partition(' ')[0]
callsign = cn_value.partition(' ')[0]
hamname = sn_value.partition(' ')[0]
if hoipnumber: # Only include entries with extensions
data.append({
'HOIP Extension': hoipnumber,
'Call': callsign,
'Name': hamname # Include raw for reference
})
# Save to CSV
if data:
df = pd.DataFrame(data)
# CSV output for debugging...
df.to_csv('hoip_subscribers.csv', index=False)
print(f'Saved {len(data)} entries to hoip_subscribers.csv')
# Excel output for production...
df.to_excel('hoip_subscribers.xlsx', index=False)
print(f'Saved {len(data)} entries to hoip_subscribers.xlsx')
else:
print('No entries found check filter or connection.')
# Unbind
conn.unbind()