第十九讲——IP地址和杂谈 本文共有3921个字,关键词: 说起IP地址,想来大家都不会陌生,因为在家里通过无线路由器上网都是需要无线路由器给手机或者电脑分配IP地址一般来说是从192.168.0.1-192.168.255.255,这些路由器都是支持DHCP服务,即自动分配、回收IP,所以我们只需要知道登录到无线路由器就可以连接互联网。 我们现在使用的是IPV4协议,不过现在IPV6也已经开始铺开了,就IPV4来说,共分为五类A、B、C、D、E 我们能够使用的就是A、B、C三类,IP地址第一位不能为0,最后一位也不能为0 A:1-127 B:128-191 C:192-233 D、E网段用于研究 我们使用正则表达式提取ifconfig中的IP地址,使用grep命令,如果仅仅是提取某个网卡的IP地址还需要使用到-A命令,即匹配网卡名称下#行。 Ifconfig |egrep ‘\<([1-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]\>\.){3}\<[1-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]\>’ . 在正则中有特殊意义需要转义,使用{m,n}缩短书写。 fgrep ----fast grep 快速的匹配,但是不支持正则表达式,执行速度快 shell编程: shell编程通俗的说就是写脚本,但是再说shell编程之前饿哦们先了解一下编程语言 简单地说,编程语言按人类易懂的方式可以分为第低级语言和高级语言,低级是指更接近硬件,高级指的是更接近人类语言,低级语言的执行效率更高,但是更难编写,高级语言相对容易,但是执行效率低下。 在高级语言中可以分为 静态语言:静态语言通常为强类型语言(变量类型),执行时事先需要转换成可执行的格式,所以静态语言也是编译型语言,有完整的程序开发环境,由编译器直接编译成二进制文件,这类语言有C、C++、C#、JAVA等等 动态语言:解释型语言,边解释边执行,on the fly(运行过程中转换),如PHP、shell、Python,动态语言通常是弱类型语言(可以不用声明变量,直接使用)。 但是解释器本身是由静态语言开发的。 说完了语言的动静分类,还有一种分类方式:面向对象和面向过程。 面向过程:把编程的着眼点、立足点主要放在解决问题过程本身。如shell、c等等 面向对象:把整个我们要实现的项目抽象成一个个的对象,并定义对象之间的动作,就是可发出的操作来完成的,面向对象更适合开发大型程序。如JAVA、Python、perl、C++等等 面向过程和面向对象是两个不同的变成风格。 对于程序来说:变量是一个不可或缺的东西 变量:内存空间 变量名:用于引用内存空间,变量名会映射为内存地址。 变量使用完后还可以进行回收,为了确定数据的存储格式,所以有了变量类型的概念,即整型,长整型、字符型等等。 变量的类型:用于确定数据的存储格式和数据的长度。字符型、数值型、整型、浮点型。变量一定是某一进程的变量 例如时间的存储:2018-01-10,按字符存储需要64位,一个字符占一个字节,不算符号,但是按照时间戳(数值大小)存储,2^24次方(24位,三个字节),所以说按不同类型存储占用的空间也会不一样,当攻击者特意的制造一个数据使缓冲区溢出,缓冲区溢出是网络攻击中很严重的行为,避免的方法就是对输入所谓数据进行判断是否溢出。 有解释器的语言,也就是通常说的脚本语言,如果变量不符合法则,可以由解释器在另一个层次上避免,所以变量类型都是弱类型的。 布尔类型:只有真和假。 逻辑运算:与或非、异或 强类型的语言在使用变量前必须先进行声明,甚至还需要初始化,如果不初始化则内存中的随机数会对其进行干扰,一般来说数值初始为0,字符串初始为空(null) 当我们进行计算时1+1属于显式转换,1+c c会转换成相应的ASCII码的数值,在不同的语言中赋值的方式也可能不同 Bash变量的类型: 环境变量:作用域为当前shell进程及其子进程。 本地变量(局部变量),局部变量未必就是本地变量 本地变量:整个bash进程都有效 局部变量:只对当前代码段有效。 位置变量:grep或者sed中的后向引用属于位置变量$1,$2,$3等也属于位置变量,用于引用脚本的参数。 特殊变量:bash中内置保存某些特殊数据的变量(系统变量),保存有特殊数据,$?:保存上一个进程(命令)执行状态的返回值。程序执行时可能有两类返回值1是程序的执行结果,2是程序状态返回结果(0-255),0表示为正确运行1-255表示错误的不同,1/2/127为系统预留 Shell中变量的引用${},大多数情况下大括号是可以省略的,当遇到Animal=pig 需要输出pigs时 echo “there are some ${Animal}s” 脚本在执行的时候会执行一个子shell进程,所以当前shell的环境变量对于子shell是有效的(命令行启动的脚本会继承当前shell的环境变量) 如果是系统自动执行的脚本(非命令行启动的脚本),需要定义需要的个环境变量。 环境变量的声明:可以直接声明并定义 export name=China 也可以先定义后声明 name=China export name 向变量中追加字符:city=bazhong city=‘$city:dazhou’可完成追加 对于shell来说,默认所有的字符都是字符串,所以默认是不能进行算术运算的。 变量使用结束后需要释放,否则会占用空间,设置变量时使用set,释放变量使用unset。 Set命令可以查看系统所有的变量 查看当前shell中的环境变量 Printenv env export 特殊变量和位置变量无法查看。 对我们而言脚本就是一种命令的堆砌,按照实际需求结合流程控制语句实现的程序,我们称为脚本。 Shebang:魔数,以#!开头加上解释器的路径,内核会根据shebang所指定的路径调用解释器执行脚本除了第一行的#!,其他行出现失误#号都是注释行。 当脚本执行结束变量就会撤销。 执行一个脚本的方式: 将当前目录加入PATH,就可以当做命令来执行 直接指定路径也可以执行./指定为当前目录。 bash 1.sh 1.sh作为参数来运行,并不是作为脚本执行。 变量名只能包含字母数字和下划线,并且不能以数字开头,不应该和已有的环境变量重名,否则会覆盖掉环境变量的值,还要做到见名知意。 「一键投喂 软糖/蛋糕/布丁/牛奶/冰阔乐!」 赞赏 × 几人行 (๑>ڡ<)☆谢谢老板~ 2元 5元 10元 50元 100元 任意金额 2元 使用微信扫描二维码完成支付 版权声明:本文为作者原创,如需转载须联系作者本人同意,未经作者本人同意不得擅自转载。 给自己讲linux 2016-12-19 评论 1525 次浏览