Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- ######################################################################
- #Copyright (C) 2025 Kris Occhipinti
- #https://filmsbykris.com
- #This program is free software: you can redistribute it and/or modify
- #it under the terms of the GNU General Public License as published by
- #the Free Software Foundation version 3 of the License.
- #This program is distributed in the hope that it will be useful,
- #but WITHOUT ANY WARRANTY; without even the implied warranty of
- #MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- #GNU General Public License for more details.
- #You should have received a copy of the GNU General Public License
- #along with this program. If not, see <http://www.gnu.org/licenses/>.
- ######################################################################
- # fatal uses SIGUSR1 to allow clean fatal errors
- trap "exit 1" 10
- PROC=$$
- function error() {
- help
- red=$(echo -en "\e[31m")
- normal=$(echo -en "\e[0m")
- echo -e "${red}$@${normal}" >&2
- # exit 1
- kill -10 $PROC
- }
- function help() {
- self="$(basename $0)"
- echo "
- Useage: $self <state> <external port> <internal port>
- Example: $self open 8080 80
- Example: $self close 80
- "
- exit
- }
- state="$1"
- [[ "$state" == "open" ]] || [[ "$state" == "close" ]] || help
- external="$2"
- [[ $external ]] || error "No external port given."
- ip="$(ip a | grep "inet " | grep -v "127.0.0.1" | awk '{print $2}' | cut -d\/ -f1)"
- server="$(upnpc -l | grep desc: | awk '{print $2}')"
- if [[ "$state" == "open" ]]; then
- internal="$3"
- [[ $internal ]] || error "No internal port given."
- cmd="upnpc -u $server -a $ip $internal $external tcp"
- elif [[ "$state" == "close" ]]; then
- cmd="upnpc -u $server -d $external tcp"
- else
- error "State needs to be 'open' or 'close'"
- fi
- echo "$cmd"
- $cmd
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement