(菜鸟自学)初学脚本编程
- Bash脚本概述
- 编写一个测试在线主机的脚本程序
- Python脚本概述
- 编写一个与Netcat功能类似的脚本程序
- C语言脚本概述
- 编写C语言脚本程序(Hello World)
Bash脚本概述
Bash脚本是一种基于Bash(Bourne Again SHell)解释器的脚本语言,用于自动化和批处理任务。它可以在Linux、Unix和其他类Unix系统上使用。
以下是一些Bash脚本的常见特性和用途:
-
自动化任务:Bash脚本可以用于自动化各种任务,如备份文件、定期清理临时文件、批量处理数据等。你可以编写一系列命令和逻辑,将其放入脚本中,并通过运行脚本来执行这些任务。
-
系统管理:Bash脚本可以帮助进行系统管理任务,例如安装软件、配置环境变量、监控系统资源等。通过编写脚本,你可以批量执行这些操作,减少手动工作量。
-
命令行工具:Bash脚本可以将一系列命令和参数组合在一起,创建自定义的命令行工具。这些工具可以接受用户输入、处理数据,并根据需要输出结果。
-
条件和循环:Bash脚本提供了条件语句(如if-else语句)和循环结构(如for循环和while循环),使得能够根据不同条件执行不同的操作,或者对一组数据进行迭代处理。
-
函数和模块化:Bash脚本支持定义函数,这样可以将一部分代码逻辑封装起来,提高代码的可读性和复用性。你可以在脚本中定义多个函数,并在需要的地方进行调用。
编写Bash脚本时,请记住以下几点:
- 使用合适的注释来解释脚本中的每个部分和关键步骤。
- 处理错误和异常情况,并提供有用的错误信息。
- 确保脚本具有足够的权限以执行所需的操作。
- 考虑脚本的可移植性,尽量避免使用特定于某个系统的功能和命令。
学习Bash脚本需要一定的时间和实践,但它是一种强大而灵活的工具,可以极大地提高自动化任务和系统管理的效率。
编写一个测试在线主机的脚本程序
- ping
使用ping命令探测某台主机是否在线
由上可知该主机在线,并且回复了icmp协议的ping请求。
但想要对大量主机进行扫描探测时,这样一个一个的去ping就不太符合实际了,这类重复且繁琐的工作通常就需要使用脚本来提高效率了。 - 脚本编写
首先编写一个pingscript.sh
的脚本,通过ICMP协议的ping命令对局域网进行扫描,以探测那些能够回复信息的主机地址。
#!/bin/bash
echo "Usage: ./pingscript.sh [network]"
echo "example: ./pingscript.sh 192.168.10"
这段代码是一个简单的Bash脚本,用于在给定网络范围内执行ping命令。下面逐行解释这段代码:
#!/bin/bash
指定使用Bash解释器来执行脚本。
echo "Usage: ./pingscript.sh [network]"
告诉用户应该使用./pingscript.sh [network]
的格式来运行脚本,并且需要提供一个网络作为参数。
echo "example: ./pingscript.sh 192.168.10"
这段代码的目的是帮助用户正确使用脚本。用户可以通过执行./pingscript.sh 192.168.10
这样的命令来运行脚本,并将指定的网络作为参数传递给脚本。
编写完成后记得保存,再使用chmod
命令赋予其执行的权限。
chmod 744 pingscript.sh
- 运行脚本
在当前目录执行脚本程序使用命令./pingscript.sh
- if语句
在脚本中添加if语句
#!/bin/bash
if [ "$1" == "" ]
then
echo "Usage: ./pingscript.sh [network]"
echo "example: ./pingscript.sh 192.168.10"
fi
if ["$1"==""]
这一行开始一个条件语句,在if语句后有一个then
语句,如果用户没有提供参数,则执行if语句中的代码块。$1是用户传递给脚本的第一个参数,通过$1来检查是否为空。
fi
这是if语句的结束标记,表示if语句的代码块已经结束。
这段代码的目的是检查用户是否提供了正确的参数。如果用户没有提供参数,脚本会输出一些提示信息,告诉用户如何正确使用脚本并提供一个示例。如果用户提供了正确的参数,脚本将继续执行其他的代码。
- for循环
在fi
前添加for循环语句
else
for x in `seq 1 254`; do
ping -c 1 $1.$x
done
else
代表如果用户提供了正确的参数,脚本将执行else语句中的代码块。
seq 1 254
代表生成一个从1到254的数字序列,然后通过$1.$x
组合成IP地址来执行ping命令。这个循环遍历给定网络范围内的所有主机,每个主机ping一次。
使用脚本ping192.168.10网段
通过反馈的扫描结果得知,在指定的局域网络中,主机192.168.10.1回复了icmp请求,因此它必然在线,另外未受到回复的则表明主机不在线或IP地址未被占用。
- 提炼数据
- 通过
grep
筛选返回内容
- 通过
在done
前添加grep
语句
ping -c1 1 $1.$x | grep "64 bytes"
此处筛选含有“64 bytes”的所有实例,若局域网络内有主机回应ping的扫描请求,就会收到这样的icmp请求。改动脚本后,再次执行脚本返回结果如下:
这样一来只会看到在线主机的IP地址了,不会再有那些为回复的主机信息了。
使用cut
进一步过滤
ping -c1 1 $1.$x | grep "64 bytes" | cut -d" " -f4
这将截取其中的IP地址,把其它数据全部过滤掉。
不过返回的信息总是跟着一个冒号为了更加的直观,需要使用到sed
命令。
使用set
删除尾部冒号
ping -c1 1 $1.$x | grep "64 bytes" | cut -d" " -f4 | sed 's/.$//'
此番处理后,这个脚本也就满足我们的需求了。
Python脚本概述
Python脚本是用Python编写的脚本文件,用于执行特定任务或自动化操作。Python是一种高级编程语言,具有简单易学、可读性强、通用性强等优点,因此在软件开发、数据处理、机器学习等领域得到广泛应用。
Python脚本可以在终端或命令行中运行,也可以通过调用其他Python模块和库来扩展其功能。Python脚本可以访问计算机上的文件、网络、数据库等资源,并且可以与其他编程语言进行互操作。
Python脚本通常以.py
扩展名结尾,它们可以包含变量、函数、条件语句、循环、异常处理等Python编程概念。Python脚本还可以使用第三方库,例如NumPy、Pandas、Matplotlib等,这些库扩展了Python的功能,使其能够更有效地处理数据和图形化显示。
Python脚本在Kali Linux中有广泛的应用,特别是在网络安全领域。Kali Linux是一个专门用于渗透测试和安全评估的操作系统,它内置了许多有用的工具和库,可以方便地编写和执行Python脚本来进行各种安全任务。
以下是几个常见的应用场景:
-
自动化渗透测试:Kali Linux中的许多渗透测试工具都提供了Python API,你可以使用Python脚本自动化执行渗透测试任务。例如,你可以编写Python脚本来自动化执行端口扫描、漏洞扫描、密码破解等任务。
-
恶意代码分析:Kali Linux中的恶意代码分析工具通常提供Python接口,你可以使用Python脚本来分析和检测恶意代码。例如,你可以编写Python脚本来提取恶意代码中的特征、分析行为或生成报告。
-
网络安全工具开发:Kali Linux提供了丰富的网络安全工具,但有时你可能需要自定义工具来满足特定需求。Python是一个灵活且易于使用的编程语言,你可以使用Python脚本来开发自己的网络安全工具或扩展现有工具的功能。
-
数据分析和可视化:Python在数据科学领域非常流行,Kali Linux也提供了用于数据分析和可视化的工具和库。你可以使用Python脚本来处理和分析渗透测试结果、网络流量数据等,并使用Matplotlib、Seaborn等库创建交互式图表和可视化报告。
总之,Python脚本在Kali Linux中是一种强大的工具,可以帮助渗透测试人员、安全研究人员和网络管理员更高效地执行各种安全任务。
编写一个与Netcat功能类似的脚本程序
此脚本程序需要能够连接某台主机的特定端口,以判断该端口是否处于开放状态。
- 首先需要实现参数的输入功能
#!/usr/bin/python
ip = raw_input("Enter the ip: ")
port = input("Enter the port: ")
#!/usr/bin/python
这是脚本的开头,指定了使用Python解释器来执行脚本。
ip = raw_input("Enter the ip: ")
这一行使用raw_input()函数来获取用户输入的IP地址,并将其存储在变量ip中。
port = input("Enter the port: ")
这一行使用input()函数来获取用户输入的端口号,并将其存储在变量port中。
脚本编写完成为脚本赋予可执行的权限,在启动后,程序会提示输入IP地址和端口号
不过程序还未实现“连接指定主机、指定端口”的端口扫描功能。
- 添加端口扫描功能
#!/usr/bin/python
import socket
ip = raw_input("Enter the ip: ")
port = input("Enter the port: ")
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
if s.connect_ex((ip,port)):
print "Port",port,"is colsed"
else:
print "Port",port,"is open"
import socket
这一行导入了Python的socket模块,用于实现网络通信。
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
这一行创建了一个TCP套接字对象s,用于与指定的IP地址和端口建立连接。socket.AF_INET表示使用IPv4地址,socket.SOCK_STREAM表示使用TCP协议。
if···else···
这是脚本的主要逻辑部分。s.connect_ex((ip,port))尝试与指定的IP地址和端口建立连接,如果连接不成功,connect_ex()函数会返回一个非零值。根据返回值是否为零来判断端口是否开放,然后打印相应的结果。
你可以运行这个脚本并输入要检查的IP地址和端口号,它会输出相应的结果,告诉你该端口是否开放。
请注意,为了使用该脚本,你需要在运行环境中拥有适当的网络访问权限,并确保指定的IP地址和端口是可访问的。
C语言脚本概述
C语言是一种通用的、中级的编程语言,常用于系统和应用程序的开发。C语言程序脚本是使用C语言编写的可以直接运行的脚本。
C语言程序脚本相比其他脚本语言(如Python)可能需要编译的步骤,但它也提供了更高的性能和更好的系统级控制。C语言适用于需要更底层控制、更高效率的应用程序开发。
编写C语言脚本程序(Hello World)
创建一个名为“cprogram.c”的文件,文件内容如下:
#include <stdio.h>
int main(int argc,char *argv[])
{
if(argc < 2)
{
printf("%s\n","Pass your name as an argument");
return 0;
}
else
{
printf("Hello %s\n",argv[1]);
return 0;
}
}
#include <stdio.h>
这是一个预处理指令,用于包含标准输入输出库(stdio.h)。它提供了处理输入和输出的函数,例如printf()。
int main(int argc,char *argv[])
这是程序主函数main()的定义。它接受两个参数:argc和argv。argc表示命令行参数的数量,argv是一个指向字符串数组的指针,其中包含每个命令行参数的字符串。
if(argc < 2){······}
这是一个条件语句,如果argc小于2,则打印一条错误信息,提示用户需要传递一个参数。printf()函数用于在终端上打印输出信息。
else{······}
如果argc大于等于2,则打印一条欢迎信息,其中argv[1]是第一个命令行参数的字符串值。
return 0
这是main()函数的返回语句,用于指示程序正常结束,并将0作为返回值传递给操作系统。
编写完成后想要执行需要事先编译,编译命令如下:
gcc cprogram.c -o cprogram
编译完成会生成一个名为cprogram
的可执行文件,直接使用命令./cprogram
会提示使用方法,按照使用方式使用命令./cprogram nbdlsplyb
能够得到正确的返回结果。