Howdt folks, We installed the MAX Utilities which included "maxstatus" a program in Python to query the MAX with SNMP for usernames, IP's, etc. I'm probably way out of date, and there's some new version that's been released- but I went ahead and rewrote some parts of it. It's only useful if you have the MIBs properly installed, and the python language interpreter installed. Here's the source, and I don't really know python, so the source is very evil. Be sure to set the IP address and SNMP read community name for what your MAX is. This is pretty similar to what that "loop" web utility does. Note that python is extremely picky about whitespace, so if my mailer doesn't eat this to bits, it should run fine. (It's a drop in replacement for the 'maxstatus' program) ----------------------- CUT HERE --------------- #!/usr/local/bin/python import sys, posix, os os.environ['MIBFILE'] = '/usr/local/lib/ascend.mib' import snmp, snmpmisc, string ascend = snmp.open("1.1.1.1", "public" ) ray = [ 0 ] def ascend_get(str): tmp = '.iso.org.dod.internet.private.enterprises.ascend.' + str try: return ascend.get(tmp) except: return (None, 'Invalid SNMP OID' + ' ' + str, 0) def ascend_get_other(str): tmp = str try: return ascend.get(tmp) except: return (None, 'Invalid SNMP OID' + ' ' + str, 0) def build_callref(): loop = 1 found = 0 while (loop < 121): zzz, chk, zzz2 = ascend_get("sessionStatusGroup.sessionStatusTable.sessionStatusEntry.ssnStatusCallReferenceNum." + `loop`) chk2 = string.atoi(chk) ray.append(chk2) loop = loop+1 return (1) def find_callref(int): loop = 1 found = 0 while (loop < 121): if (int == ray[loop]): found = loop loop = loop+1 return (found) def my_time(int): days = 0 hours = 0 minutes = 0 secs = 0 days, temp = divmod(int, 62400) hours, temp2 = divmod(temp, 3600) minutes, secs = divmod(temp2, 60) timeon = `days` + "d " + `hours` + ":" + `minutes` + ":" + `secs` return timeon systime=ascend.get("system.sysUpTime.0") uptime=string.atoi(systime[1]) print " Line Modem Time Uploaded/" print "User Speed IP Address :Chan :Port On Type /Download" print "-------------------------------------------------------------------------------" u = 1 i = 1 v = 1 build_callref() while(i < 137): valid=ascend_get("callStatusGroup.callStatusTable.callStatusEntry.callStatusValidFlag." + `i`) flag = string.atoi(valid[1]) if (flag > 1): z, sesidx, z2=ascend_get("callStatusGroup.callStatusTable.callStatusEntry.callStatusCallReferenceNum." + `i`) callref = string.atoi(sesidx) if (callref >= 1): booga = find_callref(callref) a, uname, a2=ascend_get("sessionStatusGroup.sessionStatusTable.sessionStatusEntry.ssnStatusUserName." + `booga`) b, speed, b2=ascend_get("callStatusGroup.callStatusTable.callStatusEntry.callStatusDataRate." + `i`) b, line, b2=ascend_get("callStatusGroup.callStatusTable.callStatusEntry.callStatusSlotNumber." + `i`) b, linetwo, b2=ascend_get("callStatusGroup.callStatusTable.callStatusEntry.callStatusSlotLineNumber." + `i`) linenum=string.atoi(line); linetwonum=string.atoi(linetwo); if (linenum == 1): line_test = linetwonum else: line_test = 3 b, channel, b2=ascend_get("callStatusGroup.callStatusTable.callStatusEntry.callStatusSlotChannelNumber." + `i`) b, modemslot, b2=ascend_get("callStatusGroup.callStatusTable.callStatusEntry.callStatusModemSlotNumber." + `i`) b, modemport, b2=ascend_get("callStatusGroup.callStatusTable.callStatusEntry.callStatusModemOnSlot." + `i`) b, istr, b2=ascend_get("callStatusGroup.callStatusTable.callStatusEntry.callStatusIfIndex." + `i`) ifindex=string.atoi(istr) b, inbytes, b2=ascend_get_other("interfaces.ifTable.ifEntry.ifInOctets." + `ifindex`) b, outbytes, b2=ascend_get_other("interfaces.ifTable.ifEntry.ifOutOctets." + `ifindex`) c, ip, c2=ascend_get("sessionStatusGroup.sessionStatusTable.sessionStatusEntry.ssnStatusUserIPAddress." + `booga`) d=ascend_get("callStatusGroup.callStatusTable.callStatusEntry.callStatusStartingTimeStamp." + `i`) tstamp=string.atoi(d[1]) duration = (uptime / 100) - tstamp time = my_time(duration) e=ascend_get("sessionStatusGroup.sessionStatusTable.sessionStatusEntry.ssnStatusCurrentService." + `booga`) service=string.atoi(e[1]) if (service == 3): type = 'PPP' elif (service == 11): type = 'Telnet' elif (service == 14): type = 'Terminal Server' elif (service == 5): type = 'MultiChannel PPP' elif (service == 15): type = 'MultiLink PPP' else: type = 'unknown' if (uname != '\"\"'): print "%-8s %-5s %-15s %1d:%-2s %1s:%-2s %-11s %-4s %7s / %8s" % (uname, speed, ip, line_test, channel, modemslot, modemport, time, type, inbytes, outbytes) u = u + 1 i = i+1 print "-----------------------------------------------------------------------------" u = u-1 print "Total Users: %d" % (u) ------------------------- CUT HERE ------------------------ -Will Pierce System Administrator Dreamscape Online, LLC. willp@dreamscape.com ++ Ascend Users Mailing List ++ To unsubscribe: send unsubscribe to ascend-users-request@bungi.com To get FAQ'd: <<A HREF="http://www.shore.net/~dreaming/ascend-faq">http://www.shore.net/~dreaming/ascend-faq</A>> or <<A HREF="ftp://ftp.shore.net/members/dreaming/ascend-faq.txt">ftp://ftp.shore.net/members/dreaming/ascend-faq.txt</A>> </PRE> <!--X-MsgBody-End--> <!--X-Follow-Ups--> <!--X-Follow-Ups-End--> <!--X-References--> <!--X-References-End--> <!--X-BotPNI--> <HR> <UL> <LI>Prev by Date: <STRONG><A HREF="msg05430.html">(ASCEND) Clearing unknown passwords</A></STRONG> </LI> <LI>Next by Date: <STRONG><A HREF="msg05428.html">Re: (ASCEND) TR status</A></STRONG> </LI> <LI>Prev by thread: <STRONG><A HREF="msg05428.html">Re: (ASCEND) TR status</A></STRONG> </LI> <LI>Next by thread: <STRONG><A HREF="msg05430.html">(ASCEND) Clearing unknown passwords</A></STRONG> </LI> <LI>Index(es): <UL> <LI><A HREF="mail139.html#05429"><STRONG>Main</STRONG></A></LI> <LI><A HREF="thrd38.html#05429"><STRONG>Thread</STRONG></A></LI> </UL> </LI> </UL> <!--X-BotPNI-End--> <!--X-User-Footer--> <!--X-User-Footer-End--> </BODY> </HTML>