Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- # HP OfficeConnect / 3com SFP Plus series Port/MAC/IP Mapper
- # pre-alpha / proof of concept version
- # Usage: $scriptname HOST COMMUNITY
- if ( empty($argv[1]) ) {
- printf("%s : Faltando host\ndigite %s ip-ou-host-do-switch snmp_community\n", $argv[0], $argv[0]);
- exit;
- }
- if ( empty($argv[2]) ) {
- printf("%s : Faltando community \ndigite %s %s snmp_community\n", $argv[0], $argv[0], $argv[1]);
- exit;
- }
- $snmp_ip = $argv[1];
- $snmp_community = $argv[2];
- #Force snmpwalk to output numeric OIDs
- snmp_set_oid_output_format( SNMP_OID_OUTPUT_NUMERIC );
- ####### OIDs collect ###########
- #1.3.6.1.2.1.17.4.3.1.1
- # [IF-MIB::ifName.18] => STRING: GigabitEthernet1/0/18
- $snmprawports = snmprealwalk( $snmp_ip , $snmp_community, "1.3.6.1.2.1.31.1.1.1.1");
- #1.3.6.1.2.1.17.4.3.1.1 -> MACS
- # [.1.3.6.1.2.1.17.4.3.1.1.0.24.243.61.250.16] => Hex-STRING: 00 18 F3 3D FA 10
- $snmprawmaclist = snmprealwalk( $snmp_ip , $snmp_community, "1.3.6.1.2.1.17.4.3.1.1");
- #1.3.6.1.2.1.17.4.3.1.2 -> PORTINT
- # [.1.3.6.1.2.1.17.4.3.1.2.0.24.243.61.250.16] => INTEGER: 469
- $snmprawportint = snmprealwalk( $snmp_ip , $snmp_community, "1.3.6.1.2.1.17.4.3.1.2");
- #1.3.6.1.2.1.17.1.4.1.2. -> PORTIF
- # [.1.3.6.1.2.1.17.1.4.1.2.469] => INTEGER: 31
- $snmprawportif = snmprealwalk( $snmp_ip , $snmp_community, "1.3.6.1.2.1.17.1.4.1.2");
- #OID: 1.3.6.1.2.1.3.1.1.2.30 -> IPs/MAC
- # [.1.3.6.1.2.1.3.1.1.2.30.1.192.168.69.5] => Hex-STRING: 38 2C 4A 6C E0 E6
- $snmprawipmac = snmprealwalk( $snmp_ip , $snmp_community, "1.3.6.1.2.1.3.1.1.2.30");
- #TODO set it before, change code to make life easier
- snmp_set_quick_print(1);
- #Switch data:
- $swname = snmp2_get($snmp_ip , $snmp_community, "sysName.0");
- $swlocation = snmp2_get($snmp_ip , $snmp_community, "sysLocation.0");
- $swip = snmp2_get($snmp_ip , $snmp_community, "1.3.6.1.2.1.67.1.2.1.1.3.1.2.1");
- $swuptime = snmp2_get($snmp_ip , $snmp_community, "1.3.6.1.2.1.1.3.0");
- # Data arrays
- $hp_portnames = @array();
- $macip_table = @array();
- $hp_portdata = @array();
- # Data generation
- foreach($snmprawports as $oid => $data) {
- $portname = str_replace("STRING: ", "", $data);
- $idx = str_replace(".1.3.6.1.2.1.31.1.1.1.1.", "", $oid);
- $hp_portnames[$idx] = $portname;
- }
- foreach($snmprawipmac as $key => $value) {
- $macip = str_replace(".1.3.6.1.2.1.3.1.1.2.30.1.", "", $key);
- $macaddr = str_replace("Hex-STRING: ", "", $value);
- $macaddr = str_replace(" ", "-", rtrim($macaddr));
- $macip_table[$macaddr] = $macip;
- }
- foreach ($snmprawportint as $keys => $valor) {
- $portentry = str_replace("INTEGER: ", "", $valor);
- $keyoid = str_replace(".1.3.6.1.2.1.17.4.3.1.2.", "", $keys);
- $macoid = ".1.3.6.1.2.1.17.4.3.1.1." . $keyoid;
- $macentry = str_replace(" ", "-", rtrim(str_replace("Hex-STRING: ", "", $snmprawmaclist[$macoid])));
- $portifoid = ".1.3.6.1.2.1.17.1.4.1.2." . $portentry ;
- $portif = str_replace("INTEGER: ", "", $snmprawportif[$portifoid]);
- if (array_key_exists($macentry, $macip_table)) {
- $macipaddr = $macip_table[$macentry];
- } else {
- $macipaddr = "NO-IP";
- }
- $macip = array ( 'macaddr' => $macentry, 'ipaddr'=> $macipaddr );
- if (array_key_exists($portif, $hp_portdata)) {
- array_push ($hp_portdata[$portif]['macs'], $macip);
- } else {
- $hp_portdata[$portif] = array( 'portentry' => $portentry, 'portif' => $portif, 'macs' => array($macip) );
- }
- # printf("portentry: %s, macentry: %s, portif: %s, macip: %s\n", $portentry, $macentry, $portif, $macip) ;
- }
- echo ("\n");
- printf("Switch: %s\t/\tIP: %s\t/\tUptime:%s\nLocal: %s\n\n\n", $swname, $swip, $swuptime, $swlocation);
- foreach ($hp_portnames as $ifindex => $ifname) {
- $portstr = " --- " . $ifname . " ";
- $portstr = str_pad($portstr,100,"-");
- if (array_key_exists($ifindex, $hp_portdata)) {
- printf("%s\n", $portstr );
- foreach ( $hp_portdata[$ifindex]['macs'] as $macentry ) {
- $macaddr = $macentry['macaddr'];
- $ipaddr = $macentry['ipaddr'];
- $macaddr = str_replace("-","", strtolower($macaddr));
- $macaddrdash = wordwrap($macaddr, 2, '-', true);
- $macaddrreal = wordwrap($macaddr, 2, ':', true);
- $macaddrsw = wordwrap($macaddr, 4, '-', true);
- printf("MAC: %s / %s / %s\t\tIP: %s\n", $macaddrdash, $macaddrreal, $macaddrsw, $ipaddr);
- }
- echo("\n");
- } else {
- #DEBUG
- # printf("%s\nNo Entry\n", $portstr );
- }
- }
- #DEBUG
- #print_r($snmprawports);
- #print_r($hp_portnames);
- #print_r($hp_portdata);
- #print_r($snmprawmaclist);
- #print_r($snmprawportint);
- #print_r($snmprawportif);
- #print_r($snmprawipmac);
- ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement