Script is created by Johan ven Boomgaard.
#!/bin/bash
# Set-cisco-port.sh
# ==============
# |Author: JvdB|
# ==============
#
# Find,disable,enable port using SNMP at Cisco switch#
#
# Usage: cd <directory> ./Set-cisco-port.sh <switch ip-address> <description> <action>
# Example: cd <directory> ./Set-cisco-port.sh 192.168.2.250 Test-pc e
#
# Where:
# - 1st parameter is switch IP address
# - 2nd is Description of NIC/Device
# - 3rd is operation(e - enable port when find description at port, d -disable port when find description at port)
#
# =======================================
# Start script with setting the variables
# =======================================
#
switch_ip=$1;
desc=$(echo $2 | sed 's/://g');
community="private";
operation=$3;
#
2970_get_port(){
# Check for description at port
for i in `snmpwalk -On -v2c -c $community@1 192.168.2.250 .1.3.6.1.4.1.9.9.46.1.3.1.1.2 | sed 's/.1.3.6.1.4.1.9.9.46.1.3.1.1.2.1.//g' | awk '{print $1}'`; do
find_mac=`snmpwalk -On -v2c -c $community@$i 192.168.2.250 .1.3.6.1.2.1.17.4.3.1.1 | sed s/' '//g | grep -i $desc | sed 's/^.*Hex-STRING\://g'| awk '{print $1}'`;
if [[ $find_mac != "" ]]; then
point1=$(snmpwalk -On -v2c -c $community@$i $switch_ip .1.3.6.1.2.1.17.4.3.1.1 | sed s/' '//g | grep -i $desc | sed 's/.1.3.6.1.2.1.17.4.3.1.1.//g' | sed 's/=.*//g' );
port_numb=`snmpwalk -v2c -c $community@$i $switch_ip .1.3.6.1.2.1.17.4.3.1.2 | grep -i $point1 | sed 's/^.*INTEGER\: //g'`;
echo "Description $desc was found at port number #"$port_numb;
fi
done;
}
disable_port(){
echo "Going to disable port by Description";
# Find by port description
port_to_disable=`snmpwalk -v2c -On -c $community $switch_ip .1.3.6.1.2.1.31.1.1.1.18 | grep -i $desc | sed 's/.1.3.6.1.2.1.31.1.1.1.18.//g' | awk '{print $1}'`;
# If port was not found
if [[ $port_to_disable == "" ]]; then
echo "Port wasn't found by port description. Exiting ...";
2970_get_port;
$port_to_disable=$port_numb;
echo $ $port_to_disable;
exit;
fi;
# Disable port
snmpset -v2c -c $community $switch_ip .1.3.6.1.2.1.2.2.1.7.$port_to_disable i 2;
# Save running config of Cisco switch to startup
save_2970_cfg;
}
enable_port(){
echo "Going to enable port by Description";
# Find by port description
port_to_enable=`snmpwalk -v2c -On -c $community $switch_ip .1.3.6.1.2.1.31.1.1.1.18 | grep -i $desc | sed 's/.1.3.6.1.2.1.31.1.1.1.18.//g' | awk '{print $1}'`;
# If port was not found
if [[ $port_to_enable == "" ]]; then
echo "Port wasn't found by port description. Exiting ...";
2970_get_port;
$port_to_enable=$port_numb;
echo $ $port_to_enable;
exit;
fi;
# Enable port
snmpset -v2c -c $community $switch_ip .1.3.6.1.2.1.2.2.1.7.$port_to_enable i 1;
# Save running config of Cisco switch to startup
save_2970_cfg;
}
save_2970_cfg(){
echo "Saving Cisco 2970 switch configuration";
snmpset -t60 -v2c -c $community $switch_ip 1.3.6.1.4.1.9.2.1.54.0 i 1
}
main(){
if [[ $operation == "f" ]]; then
echo "Find port operation";
2970_get_port;
elif [[ $operation == "d" ]]; then
echo "Disable port operation";
disable_port;
elif [[ $operation == "e" ]]; then
echo "Enable port operation";
enable_port;
else
echo "Wrong arguments given";
fi;
}
main;