当前位置:首页 > NASL脚本编写教程
th_seq :
其中,标志参数th_flags必须是TH_SYN、TH_ACK、TH_FIN、TH_PUSH或者TH_RST,这些标 志可以使用│操作符结合到一块。th_flags还可以使用一个整数值。ip_packet必须首先 由forge_ip_packet()函数产生或者使用send_packet()、pcap_next()函数得到的返回值 。
函数set_tcp_elements()能够修改TCP报文的内容,其原型如下: set_tcp_elements( tcp :
除非你自己设置th_sum参数,否则函数会自动计算报文的校验和。 函数get_tcp_element()用来设置TCP报文的内容,其原型如下: element = get_tcp_elements( tcp :
element :
element_name必须是\、\、\、\、\、\th_x2\、\、\、\、\其中之一。注意:引号是不可缺少 的。
3.2.3.构造UDP报文
UDP报文构造函数forge_udp_packet()和TCP构造函数极为类似,其原型如下: udp = forge_udp_packet( ip :
uh_sport :
而set_udp_elements()和get_udp_elements()函数和TCP报文对应的处理函数用法也相同 。
3.2.4.构造ICMP报文 3.2.5.构造IGMP报文 3.2.6.发送报文
构造报文的操作完成之后,你可以使用send_packet()函数将它们发送出去,其原型如下 :
reply = send_packet(packet1,packet2,....,packetN, pcap_active:
如果pcap_active参数为TRUE,这个函数就会等待目标的回应。pcap_filter用来设置你 需要得到的报文类型,详情请参考pcap或者tcpdump的手册页。 3.2.7.读取报文
你可以使用pcap_next()函数读取一个报文,其原型如下: reply = pcap_next();
这个函数将从你使用的最后一个接口读取一个报文,报文的类型取决于最后设置的pcap 类型。 3.3.工具函数
NASL还提供了一些工具函数以简化你的编程。 this_host()
获得运行脚本的主机IP地址,没有参数。 get_host_name()
返回当前被测试主机的主机名,没有参数。 get_host_ip()
返回当前被测试主机的IP地址,没有参数。 get_host_open_port()
获得远程主机打开的第一个端口号,没有参数。这个函数对于某些脚本(例如:land)非 常有用,有些TCP序列号分析程序需要通过这个函数获得远程主机一个打开的端口。 get_port_stat(
如果TCP端口
在一个打开的套接字上初始化一个telnet会话,并且返回telnet数据的第一行。例如:
soc = open_sock_tcp(23); buffer = telnet_init(soc);
display(\,\tcp_ping()
如果远程主机应答TCP ping请求(发送一个设置ACK标志的TCP报文),本函数就返回TRUE ,没有参数。 getrcpport()
获得远程主机的RPC端口号,原型为:
result = getrpcport(program :
如果远程主机的
NASL允许你象处理数字一样处理字符串。因此,你能够安全地使用==、<和>等操作符。 例如:
a = \b = \if(a
#因为version 1.2.3比version 1.4.1低 #因此,开始执行这里的代码 }
c = \if(a == c){ #两个字符串相等 #因此执行这里的代码 }
在NASL中,也可以获得一个字符串的某个字符,和C语言完全相同,例如: a = \
b = a[1]; #b等于\
你也可以在一个字符串中加、减一个字符串,例如: a = \
b = a - \等于\a = \b = \
c = a - b; #c等于\a = \c = \
c = a - b; #a等于\
除此之外,><也可以用于字符串的处理。NASL有很多函数来构造或者修改字符串: 4.1.处理正则表达式的ereg()函数
在NASL中,模式匹配是由ereg()函数完成的。原型如下: result = ereg(pattern:
正则表达式的语法是egrep风格的。细节请参考egrep的手册页。例如: if(ereg(pattern:\{
display(\}
mystring=recv(socket:soc,length:1024); if(ereg(pattern:\{
display(\}
4.2.egrep()函数
egrep()函数返回一个多行文本中,匹配
soc=open_soc_tcp(80);
str=string(\send(socket:soc,data:str); r=recv(socket:soc,length:1024);
server=egrep(pattern:\.*\if(server)display(server); 4.3.crap()函数
crap()函数非常便于测试缓冲区溢出,有两种原型: crap(
获得一个以'X'填充的长度为
高一个长度为
b=crap(4096); #b=\个X) c=crap(length:12,data:\4.4.string()函数
这个函数用来定制字符串。其原型为: string(
a=string(\等于\#末尾回行
b=string(1,\等于\
c=string(\等于\个X) #后面是一个回车和一个回行 4.5.strlen()函数
strlen()函数返回一个字符串的长度,例如: a==strlen(\等于4 4.6.raw_string()函数
这个函数能够把数字转换为对应的字符,例如:
a=raw_string(80,81,82); #80、81、82分别对应ASCII字符的PQR 4.7.strtoint()函数
这个函数把一个NASL整数转换为一个二进制整数。原型为: value=strtolen(number:
这个函数比较适合于和raw_string()函数一块使用。size参数是NASL整数的字节数,可 以是:1、2、4。 4.8.tolower()函数
这个函数能够把一个字符串中的所有大写字符转换为小写字符。原型为: string2=tolower(
a=\
b=tolower(a); #b等于\5.总结
这是NASL Reference Guide的第一部分,主要介绍了NASL的各种函数。在下一部分我们
共分享92篇相关文档