我侄子好可爱

随便找了个脚本解释了一下.

上一篇 / 下一篇  2008-02-25 10:43:47 / 个人分类:LINUX应用

#!/bin/sh

# SHELL脚本的的开始

PATH=/bin:/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin:/usr/sbin:~/bin

#PATH赋值

export PATH #bin path

#定义环境变量,就是可执行文件的目录的位置

#IFCONFIG=`ifonfig |send '1,d' |awk '4' -d' '9'|PRINT{ IPADD } |echo $1 `

#应该是给变量IFCONFIG赋值,感觉这句话有错误,应该是

#IFCONFIG1=`ifconfig |sed '1,d' |awk '4' -d' '9'|PRINT{ IPADD } |echo $1 `

#`ifconfig命令手输出9行如下

#|sed '1,d'|的意思是删除第一行,为空白行

#|awk '4' -d' '9'|个人理解应该是把4-9行都删除,因为2行是IPV4地址,3行是IPV6地址

#但是感觉语法错误。应该写成 |awk '4,9 d'|其实'4,9 d'是和sedgrep相似的语法结构,个人理解,没有找到响应#的手册,在AWK手册上没有找到匹配的说明,不知道'4,9 d'd应该在什么位置

#PRINT{ IPADD }这句没有明白

#echo $1第一个变量参数,因为前面不明白,所以不知道这个参数是什么

#这个是标准的输入IP和子网掩码的句子
#ifconfig |awk 'BEGIN{RS=""} /eth0/ {print "ipadd:" substr($7,6) "\nmacadd:" $5}'
#输出的结果是
#ipadd:192.168.1.11
#macadd:00:11;34:AA:A6:DA
#如果想得到仅仅是IP地址的参数,再加awk 'BEGIN {FS=":"} {print $2 }'删除子网掩码就能得到纯正的IP地址,
#ifconfig |awk 'BEGIN{RS=""} /eth0/ {print "ipadd:\n" substr($7,6) "\nmacadd:" $5}'|awk 'BEGIN {FS=":"} {print $2 }'

#结果是

#192.168.1.11

#00

#下面的语句的结果是

#ifconfig |awk 'BEGIN{RS=""} /eth0/ {print "ipadd:" substr($7,6) }'|awk 'BEGIN {FS=":"} {print $2 }'

#192.168.1.11

#所以就可以把IP#址赋值给变量IPCONFIG

#IPCONFIG= ifconfig |awk 'BEGIN{RS=""} /eth0/ {print "ipadd:" substr($7,6) }'|awk 'BEGIN {FS=":"} {print $2 }'

 

#{IPTABLES} -t nat -A POSTROUTING -p tcp --dport 3389 -j DNAT --to $IFCONFIG

#这句话的意思是

#把从本地出去的的目的地址是3389的数据包的目的IP改成IPCONFIG的地址,这句话是典型的错误,在

#IPTABLEpostrouting不能和DNAT连用,我们想一下把出去的目的地址改成本地,那好比把邮寄地址写成自己,#这封信还能邮寄出去吗?

 

#{IPTABLES} -t nat -A PREROUING -s 192.168.10.0/24 -j ACCEPT

#这句话的意思是从外面进来的源地址是192.168.10.0/24网段的全部接受,但是接受了,做什么处理,怎么做

#NAT处理没有说

正确的IPTABLE的数据报的流程是这样的,先判断目的地址是不是本机器的包如果是就进去INPUT,如果不是就FORWARD了。

INET_IFACE="ppp0"

#INET_IFACE赋值PPP0

LO_IFACE="lo"

#LO_IFACE赋值lo

 

#调用模块,这些模块全是网络用到的,网络转发,网络地址过滤,数据报状态的改变等等。详细的以后给你文档

/sbin/depmod -a

/sbin/modprobe ip_tables

/sbin/modprobe ip_conntrack

/sbin/modprobe ip_conntrack_ftp

/sbin/modprobe ip_nat_ftp

/sbin/modprobe iptable_filter

/sbin/modprobe iptable_nat

/sbin/modprobe iptable_mangle

/sbin/modprobe ipt_MASQUERADE

/sbin/modprobe ipt_MARK

/sbin/modprobe ipt_TOS

/sbin/modprobe ipt_TCPMSS

/sbin/modprobe ipt_mark

/sbin/modprobe ipt_tos

/sbin/modprobe ipt_state

 

INET_IP=`ifconfig ppp0 |sed -e '1d' -e '3,$d' |awk '{print $2 }' |awk 'BEGIN {FS=":"} {print $2 }'`

#sed -e '1d' -e '3,$d'这就是把ifconfig的输出删除第一行,第三行到最后一行,就留下第二行,就是

#inet addr:192.168.1.11 Bcast:192.168.1.255 Mask:255.255.255.0

#awk '{print $2 }'打印这行的第二个参数就是输出这些addr:192.168.1.111

 

#awk 'BEGIN {FS=":"} {print $2 }'

#在这里,BEGIN预置了内部变量FS(字段分隔符),分隔符号就是冒号   

#第一个变量就成了addr

#第二个变量就是192.168.1.111

 

#{IPTABLES} -t nat -A PREROUTING -d ${INET_IP} -p tcp --dport 3389 -j DNAT --to-destination 192.168.10.3:3389

#这句话的意思是从外面进来的数据目的地址是本机器的,TCP包,目的端口是3389的数据包。把目的地址换成#192.168.10.3端口是3389转发出去,就不进INPUT了。就是在这处理

走这边的线路

 

 

#{IPTABLES} -A FORWARD -p tcp -d 192.168.10.3 --dport 3389 -j ACCEPT

#这句话的意思是目的地址是192.168.10.3目的端口是3389TCP数据包全部转发的

#{IPTABLES} -t nat -I POSTROUTING -s 192.168.10.0/24 -p tcp -d 192.168.10.3 --dport 3389 -j SNAT --to 192.168.10.1

#这句话的意思从192.168.10.0/24出去的访问目的地址192.168.10.3目的端口是3389TCP数据包,全部把源地址#换成192.168.10.1。这就不明白了,好比你从你着过的把发到北京的信件的源地址都写成你的地址,那回信也都会#回到192.168.10.1这里,。那发信笺的人根本收不到信笺,除非你再把原来的地址给人家还原回去,这不可能,

#因为你没有记录下来,

#还有一个疑问

#192.168.10.3192.168.10.0/24本来在同一个网段,发送信笺根本不会经过网关,发送信息的原理是

#把目的地址和自己的子网掩码相与。如果和本机器的IP在同一个子网,就去查询ARP表,(也就是IP地址对应的#固化MAC地址)找到了,就把数据包发直接写上MAC地址发送出去了,如果找不到,就发个ARP请求广播包。#格式就不详细说了。包里写上目的地址但是MAC地址为FF FF FF FF FF FF,好比用大喇叭广播一遍,就是我找#张三,张三听到了回给信息,这样就可以知道张三在哪儿了,

#还有一种情况,如果不是在同一网段,就把数据发到网关,如果没有找到网关或者你没有定义网关地址,就丢弃

#该数据包

#所以认为你这样转换源地址没有意思。

 

check=`echo $?`

#$?是值上个执行的指令所返回的数值,这有两个重点,一就是上个执行的指令;一就是返回的值

当我们执行一些指令是。好比你执行的IPTABLES执行,这些指令都会返回一些执行后的代码。一般来说,如果成功执行了该指令,就返回数值0。如果执行命令有错,就返回错误的代码,一般用非0的数字。把返回的数值赋值给check变量

echo "$check"           显示这个check的数值

echo " ...... done"         显示脚本执行完毕

 

最后特别注意的是,IPTABLES的默认的规则是

设置缺省策略-设置内置链的缺省动作.

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

就是只能从机器访问外网,外网不能访问内网,除非你允许端口进来或者跳转


相关阅读:

TAG: Shell shell 脚本 解释 SHELL bin shnbsp

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

我的栏目

日历

« 2008-09-07  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 9806
  • 日志数: 19
  • 图片数: 1
  • 建立时间: 2007-10-15
  • 更新时间: 2008-05-08

RSS订阅

Open Toolbar