PDA

View Full Version : Fastidioso problema con uno script.


Braga83
25-11-2009, 18:31
Ho trovato uno script per il firewall su internet. Purtroppo credo ci sia un
problema di encoding. Il simbolo di fine linea mi viene visualizzato come "^M"
se provo a leggere il file con less.

Come posso fare? Con altri programmi il file viene letto correttamente ( nano, kate, gedit ) pero' se provo a lanciarlo da console ottengo.

echo: bad interpreter: No such file or directory/bin/bash

Quasi sicuramente e' dovuto ad un problema di encoding.

Che posso fare?

Braga83
25-11-2009, 19:13
Questo e' l'output che ottengo con cat -e firewall.sh

#!/bin/bash^M#^M# Firewall personale by Benjamin (Mizar)^M# Modifyed by Ptah 31 May 2007^M# To be used in conjunction with lo.sh and wan.sh^M# lo.sh and wan.sh MUST NOT be renamed until done^M# ALSO in this file^M##################################################^M#########################^M# Definizione Variabili #^M#########################^MIPTABLES="/sbin/iptables"^MINITD="/home/myhome/Script/Firewall"^MLO="127.0.0.1"^M##############################^M# Definizione delle funzioni #^M# Nei file le spiegazioni #^M##############################^M##^M# $1 = nome interfaccia in ifconfig^M# $2 = ip interfaccia^M##^MinterfacciaLo()^M{^M $INITD/lo.sh $1 $IPTABLES^M}^MinterfacciaWan()^M{^M $INITD/wan.sh $1 $2 $IPTABLES^M}^M################################^M# Cosa devo fare del firewall? #^M################################^Mcase "$1" in^M start)^M ########################^M # Attivazione Firewall #^M ########################^M echo -n "Attivazione Firewall: "^M #################################^M # Caricamento Moduli del Kernel #^M #################################^M modprobe ip_tables^M modprobe iptable_nat^M modprobe ip_conntrack^M modprobe ip_conntrack_ftp^M modprobe ip_nat_ftp^M modprobe ipt_LOG^M modprobe ipt_MARK^M modprobe ipt_MASQUERADE^M modprobe ipt_REDIRECT^M modprobe ipt_REJECT^M modprobe ipt_TOS^M modprobe ipt_limit^M modprobe ipt_mac^M modprobe ipt_mark^M modprobe ipt_multiport^M modprobe ipt_state^M modprobe ipt_tos^M modprobe iptable_mangle^M #modprobe ipt_psd^M ############################^M # Reset delle impostazioni #^M ############################^M $IPTABLES -F^M $IPTABLES -F -t nat^M $IPTABLES -F -t mangle^M $IPTABLES -X^M $IPTABLES -X -t nat^M $IPTABLES -X -t mangle^M ################################^M # Impostazione Policy standard #^M ################################^M $IPTABLES -P INPUT DROP^M $IPTABLES -P FORWARD DROP^M $IPTABLES -P OUTPUT ACCEPT^M ###################################^M # Cerco le interfacce del sistema #^M ###################################^M CFGIFACE=`ifconfig | grep -i "Link encap:" | awk {'print $1'}`^M ###################################^M # Ciclo sui nomi delle Interfacce #^M ###################################^M for IFACE in $CFGIFACE^M do^M IFACEIP=`ifconfig | grep -i -A 1 "$IFACE" | grep "addr:" | awk -F ':' {'print $2'} | awk {'print $1'}`^M if [ $IFACEIP = $LO ] ; then^M interfacciaLo "$IFACE"^M else^M interfacciaWan "$IFACE" "$IFACEIP"^M fi^M done^M ;;^M stop)^M ###########################^M # Disattivazione Firewall #^M ###########################^M echo -n "Disattivazione Firewall: "^M $IPTABLES -F^M $IPTABLES -F -t nat^M $IPTABLES -F -t mangle^M $IPTABLES -X^M $IPTABLES -X -t nat^M $IPTABLES -X -t mangle^M $IPTABLES -P INPUT ACCEPT^M $IPTABLES -P FORWARD ACCEPT^M $IPTABLES -P OUTPUT ACCEPT^M echo "ok"^M ;;^M status)^M ##############################^M # Display stato del Firewall #^M ##############################^M echo -n "Regole attuali nel Firewall: "^M $IPTABLES -L^M ;;^M restart|reload)^M $0 stop^M $0 start^M ;;^M *)^M echo "Utilizzo: firewall {start|stop|restart|reload|status}" >&2^M exit 1^M ;;^Mesac^Mexit 0


Mentre quello che mi aspetterei e' questo:


#!/bin/bash
#
# Firewall personale by Benjamin (Mizar)
# Modifyed by Ptah 31 May 2007
# To be used in conjunction with lo.sh and wan.sh
# lo.sh and wan.sh MUST NOT be renamed until done
# ALSO in this file
##################################################
#########################
# Definizione Variabili #
#########################
IPTABLES="/sbin/iptables"
INITD="/home/myhome/Script/Firewall"
LO="127.0.0.1"
##############################
# Definizione delle funzioni #
# Nei file le spiegazioni #
##############################
##
# $1 = nome interfaccia in ifconfig
# $2 = ip interfaccia
##
interfacciaLo()
{
$INITD/lo.sh $1 $IPTABLES
}
interfacciaWan()
{
$INITD/wan.sh $1 $2 $IPTABLES
}
################################
# Cosa devo fare del firewall? #
################################
case "$1" in
start)
########################
# Attivazione Firewall #
########################
echo -n "Attivazione Firewall: "
#################################
# Caricamento Moduli del Kernel #
#################################
modprobe ip_tables
modprobe iptable_nat
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ipt_LOG
modprobe ipt_MARK
modprobe ipt_MASQUERADE
modprobe ipt_REDIRECT
modprobe ipt_REJECT
modprobe ipt_TOS
modprobe ipt_limit
modprobe ipt_mac
modprobe ipt_mark
modprobe ipt_multiport
modprobe ipt_state
modprobe ipt_tos
modprobe iptable_mangle
#modprobe ipt_psd
############################
# Reset delle impostazioni #
############################
$IPTABLES -F
$IPTABLES -F -t nat
$IPTABLES -F -t mangle
$IPTABLES -X
$IPTABLES -X -t nat
$IPTABLES -X -t mangle
################################
# Impostazione Policy standard #
################################
$IPTABLES -P INPUT DROP
$IPTABLES -P FORWARD DROP
$IPTABLES -P OUTPUT ACCEPT
###################################
# Cerco le interfacce del sistema #
###################################
CFGIFACE=`ifconfig | grep -i "Link encap:" | awk {'print $1'}`
###################################
# Ciclo sui nomi delle Interfacce #
###################################
for IFACE in $CFGIFACE
do
IFACEIP=`ifconfig | grep -i -A 1 "$IFACE" | grep "addr:" | awk -F ':' {'print $2'} | awk {'print $1'}`
if [ $IFACEIP = $LO ] ; then
interfacciaLo "$IFACE"
else
interfacciaWan "$IFACE" "$IFACEIP"
fi
done
;;
stop)
###########################
# Disattivazione Firewall #
###########################
echo -n "Disattivazione Firewall: "
$IPTABLES -F
$IPTABLES -F -t nat
$IPTABLES -F -t mangle
$IPTABLES -X
$IPTABLES -X -t nat
$IPTABLES -X -t mangle
$IPTABLES -P INPUT ACCEPT
$IPTABLES -P FORWARD ACCEPT
$IPTABLES -P OUTPUT ACCEPT
echo "ok"
;;
status)
##############################
# Display stato del Firewall #
##############################
echo -n "Regole attuali nel Firewall: "
$IPTABLES -L
;;
restart|reload)
$0 stop
$0 start
;;
*)
echo "Utilizzo: firewall {start|stop|restart|reload|status}" >&2
exit 1
;;
esac
exit 0

Gimli[2BV!2B]
25-11-2009, 19:30
Comando sed per sotrituire il control M (^M) con il classico newline (\n):
sed 's/^M/\n/' firewall.sh > firewall.sh.NEW

Per scrivere il ^M occorre premere Ctrl v, seguito da Ctrl m

Braga83
25-11-2009, 19:42
Grazie e' gia' un'inizio. Purtroppo il comando che mi hai dato mi ha sostituito
solo il primo carriage return.

Gimli[2BV!2B]
25-11-2009, 20:13
Ah, quindi lo tratta come il newline, oppure si incarta sul newline sostituito... non l'avevo testato.

Prova con questo ciclo:
sed -e :a -e '$!N;s/^M/\n/;ta' firewall.sh > firewall.sh.NEW

Braga83
25-11-2009, 20:51
Bingo!

Grazie mille!:)