2015-08-08 5 views
0

Я сделал Iptables сценарий следующим образом:Контрольного кода перед отправкой

#!/bin/sh 
echo "Kaveen's TCP Redirect SCRIPT" 
clear 
read -p "Port:" port 
echo "" 
read -p "Customer IP:" cusip 
echo "" 
read -p "Your Filtered IP:" filip 
echo "" 
read -p "Your Secondary IP:" secip 
echo "Generating TCP Redirect on port $port from your ip $filip to customer  ip $cusip" 
iptables -t nat -A PREROUTING -p tcp -d $filip --dport $port -j DNAT --to- destination $cusip 
echo "TCP Redirect 1/2 OK" 
iptables -A FORWARD -p tcp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT 
echo "TCP Redirect 2/2 OK" 
iptables -t nat -A POSTROUTING -d $cusip -j SNAT --to-source $secip 
echo "Better Traffic Movement rule 1/1 OK" 
iptables -t nat -A POSTROUTING -j SNAT --to-source $filip 
echo "Player Movement Rule 1/1 OK" 
echo "Generating reset script...." 
echo "#!/bin/sh" >> reset.sh 
echo "iptables -F" >> reset.sh 
echo "iptables -X" >> reset.sh 
echo "iptables -t nat -F" >> reset.sh 
echo "iptables -t nat -X" >> reset.sh 
echo "iptables -t mangle -F" >> reset.sh 
echo "iptables -t mangle -X" >> reset.sh 
echo "iptables -P INPUT ACCEPT" >> reset.sh 
echo "iptables -P FORWARD ACCEPT" >> reset.sh 
echo "iptables -P OUTPUT ACCEPT" >> reset.sh 
echo "iptables -F" >> reset.sh 
echo "iptables -X" >> reset.sh 
echo "iptables -t nat -F" >> reset.sh 
echo "iptables -t nat -X" >> reset.sh 
echo "iptables -t mangle -F" >> reset.sh 
echo "iptables -t mangle -X" >> reset.sh 
echo "iptables -P INPUT ACCEPT" >> reset.sh 
echo "iptables -P FORWARD ACCEPT" >> reset.sh 
echo "iptables -P OUTPUT ACCEPT" >> reset.sh 
chmod +x reset.sh 
echo "Reset script creation OK" 
echo "Reset script can be used via ./reset.sh in directory:" 
pwd 
echo "TCP Redirect made from $fillip to $cusip on port $port" 

Теперь, как вы можете видеть, что есть куча команд IPtables там, я хотел бы функцию, или какой-то образом я можете ПРОВЕРИТЬ эти команды, и если что-то пойдет не так.

он возвращает FAILED, мне также хотелось бы проверить, что входные данные для «Порт» «Клиентский IP» - это ПОРТЫ и IP-адреса, а не буквы, слова, но правильно сформированные IP-адреса и порт (для первый)

+0

Не следует ли сначала проверять ваш вход (порт и IP-адрес), чтобы * предотвратить * сбои? – larsks

ответ

0

Вы можете использовать ip route get, чтобы помочь решить, является ли вход действительным IP-адресом, предполагая, что ваша машина должна иметь возможность маршрутизировать все. Это не удастся, если вы передадите ему что-то иное, чем IP.

Для порта, вы можете проверить, если это положительное целое число довольно легко, как

if [[ $port =~ ^[0-9]+$ ]]; then 
    echo "It's a non-negative int!" 
fi 

Если вы хотите знать, если он попадает в допустимый диапазон портов, вы могли бы проверить, если он находится в диапазоне вы хочу, как

if [[ $port -gt 0 && $port -lt 65535 ]]; then 
    echo "Port is probably OK" 
fi 

Там может быть более простым способом, чтобы проверить IP-часть, но если вы не готовы принять строки, которые выглядят как IP-адрес, но имеют недопустимые значения (то есть октеты больше, чем 255) он получает проверяя их, но проверяя, будет ли система знать, как попытаться получить пакет для IP - это быстрый «n» грязный стенд для меня, по крайней мере.

Можно использовать успех или неудачу любой команды, ip route get в этом случае, в if так же, как так:

if ip route get $cusip &>/dev/null; then 
    echo "$cusip is an address I know how to route to" 
else 
    echo "I either didn't know what $cusip is or don't know how to get there" 
fi 

Я добавил &>/dev/null скрыть вывод команды, так как мы не позаботьтесь о том, что он говорит, мы просто хотим знать, если это произойдет или не удастся.

+0

Как подключить ip-маршрут к инструкции if? –

+0

После ELSE, где говорится, что я не знаю, как туда добраться, как мне вызвать выход и остановить скрипт? –

+0

просто «выход» на другую линию после эха? –

Смежные вопросы