nasl常用函数
来源:互联网 发布:产品数据管理软件pdm 编辑:程序博客网 时间:2024/04/28 02:25
open_sock_tcp()、open_sock_udp()分别用于打开一个TCP或者UDP套接字。
close()关闭一个端口。
recv(socket:<socketname>, length:<length>[,timeout:<timeout>)
recv_line(socket:<socketname>, length:<length>[,timeout:<timeout>)
从套接字<socketname>读取<length>个字节,超时(timeout)参数是可选的,以秒为单位。
recv()只能用于TCP,但遇到换行(\n)操作终止;recv_line用于TCP、UDP。默认超时5秒,
如果超时返回FALSE。
send(socket:<socket>, data:<data>[,length:<length>])
从套接字<socket>发送数据<data>。可选参数length告诉函数发送<length>字节。如果没有
设置length,发送操作就在遇到NULL时终止。
FTP操作:
ftp_log_in(socket:<soc>,user:<login>,pass:<pass>)
尝试通过<soc>套接字登录到远程FTP主机。如果用户名<login>和密码<pass>都是正确,就返回TRUE,
否则返回FALSE。
ftp_get_pasv_port(socket:<soc>)
向远程FTP服务器发出一个PASV命令,获取连接的端口。如果发生错误,返回FALSE。
soc = open_sock_tcp(21);
if(ftp_log_in(socket:soc, user:"anonymous", pass:"joe@"))
{
port = ftp_get_pasv_port(socket:soc)
if(port)
{
soc2 = oepn_sock_tcp(port);
data = string("RETR /etc/passwd\r\n");
send(socket:soc, data:data);
password_file = recv(socket:soc2, length:10000);
display(password_file);
close(soc2);
}
close(soc);
}
WWW操作:
is_cgi_installed(<name>)
测试远程WEB服务器是否安装了名为<name>的CGI程序。这个函数向远程WEB服务器发出GET请求实现这个目的。
如果<name>不是以斜杠(/)开头,就以为它是相对于/cgi-bin/。
这个函数也可以用于确定某个文件是否存在。
if(is_cgi_installed("/robots.txt"))
{
display("The file /robots.txt is present \n");
}
构造IP报文:
forge_ip_packet()函数构造一个新的IP报文;
<return_value>=forge_ip_packet(ip_hl:<ip_hl>,
ip_v:<ip_v>, ip_tos:<ip_tos>, ip_len:<ip_len>, ip_id:<ip_id>, ip_off:<ip_off>,
ip_ttl:<ip_ttl>, ip_p:<ip_p>, ip_src:<ip_src>, ip_dst:<ip_dst>, [ip_sum:<ip_sum>]);
ip_p参数可以是一个整数值,或者是IPPROTO_TCP, IPPROTO_UDP, IPPROTO_ICMP, IPPROTO_IGMP,
IPPROTO_IP等等。
get_ip_element()函数获得报文某个域的值。
<element> = get_ip_element(ip:<ip_varible>,
element:"ip_hl"|"ip_v"|"ip_tos"|"ip_len"|"ip_id"|"ip_off"|"ip_ttl"|"ip_p"|"ip_sum"|
"ip_src"|"ip_dst");
set_ip_element()函数改变现有IP报文某个域的值。
这个函数可以改变IP报文<ip_varible>的值,如果你没有修改ip_sum域的值,它会自动重新计算
这个函数没有构造报文的能力,因此需要把它放在forge_ip_packet()函数之后。
set_ip_element(ip:<ip_variable>,[ip_hl:<ip_hl>,]
[ip_v:<ip_v>,] [ip_tos:<ip_tos>,] [ip_len:<ip_len>,] [ip_id:<ip_id>,]
[ip_off:<ip_off>,] [ip_ttl:<ip_ttl>,] [ip_p:<ip_p>,] [ip_src:<ip_src>,]
[ip_dst:<ip_dst>,] [ip_sum:<ip_sum>]);
构造TCP报文:
forge_tcp_packet()用来构造TCP报文。
tcppacket = forge_tcp_packet(
ip:<ip_packet>, th_sport:<source_port>,
th_dport:<destination_port>, th_flags:<tcp_flags>, th_seq:<sequence_number>,
[th_x2:<unused>], th_off<offset>, th_win:<window>, th_urp:<urgent_pointer>,
th_sum:<checksum>, [data:<data>]);
th_flags必须是TH_SYN TH_ACK TH_FIN TH_PUSH TH_RST,这些标志可以使用|操作符结合到
一块。ip_packet必须首先由forge_ip_packet()函数产生或者使用send_packet()、pcap_next
函数得到的返回值。
set_tcp_elements()能够修改TCP报文的内容。
set_tcp_elements(tcp:<tcp_packet>, [th_sport:<source_port>,]
[th_dport:<destination_port>,] [th_flags:<tcp_flags>,] [th_seq:<sequence_number>,]
[th_ack:<acknowledgement_number>,] [th_x2:<unused>,] [th_off:<offset>,] [th_win:<window>,]
[th_urp:<urgent_pointer>,] [th_sum:<checksum>,] [data:<data>]);
除非设置th_sum参数,否则函数会自动计算报文的校验和。
get_tcp_elements()用来设置TCP报文的内容。
element = get_tcp_elements(tcp:<tcp_packet>,
element:<element_name>);
element_name必须是"tcp_sport" "th_dport" "th_flags" "th_seq" "th_ack" "th_x2" "th_off"
"th_win" "th_urp" "th_sum"
构造UDP报文:
forge_udp_packet()构造UDP报文。
udp = forge_udp_packet(ip:<ip_packet>, uh_sport:<source_port>, uh_dport:<destination_port>,
uh_ulen:<length>, [uh_sum:<checksum>,] [data:<data>]);
set_udp_elements() get_udp_elements()与tcp的相似。
发送报文:
send_packet()函数发送报文。
reply = send_packet(packet1, packet2,...., packetN, pcap_active:<TRUE|FALSE>, pcap_filter:<pcap_filer>);
如果pcap_active参数为TRUE,这个函数就会等待目标的回应。
pcap_filter用来设置你需要得到的报文。
读取报文:
pcap_next()函数将从使用的最后一个接口读取一个报文,报文的类型取决于最后的设置的pcap类型。
replay = pcap_next();
工具函数:
this_host()获取运行脚本的主机IP地址,没有参数。
get_host_name()获取当前被测试主机的主机名,没有参数。
get_host_ip()获取当前被测试主机的IP地址,没有参数。
get_host_open_port()获取远程主机打开的第一个端口号,没有参数。
get_port_stat(<portnum>)获取端口的状态。
telnet_init(<sock>)在一个打开的套接字上初始化一个telnet会话,并且返回telnet数据的第一行。
tcp_ping()如果远程主机应答TCP ping请求(发送一个设置ACK标志的TCP报文),本函数就返回TRUE,没有参数。
getrpcport(program:<program_number>, protocol:<IPPROTO_TCP|IPROTO_UDP>, [version:<version>])
获取远程主机的RPC端口号。如果远程主机的<program_number>程序没有在RPC portmap监控进程中注册就返回0。
正则表达式函数:
ereg()模式匹配。
result = ereg(pattern:<pattern>, string:<string>);
egrep()函数返回一个多行文本,匹配<pattern>的第一行。
str = egrep(pattern:<pattern>, string:<string>);
crap()函数非常便于测试缓冲区溢出。获取一个"X"填充的长度为<length>的字符串。
crap(<length>)
crap(length:<length>, data:<data>)
获取一个长度为<length>的字符串,并使用<data>填充字符串。
strlen()函数功能都知道。
raw_string()函数能够把数字转换成对应的字符。
strtoint(number:<nasl_integer>, size<number_of_byte>)把一个NASL整数转换为一个二进制整数。
size参数为NASL整数的字节数:1,2,4。
tolower()把大写字符转换成小写
- nasl常用函数
- nasl脚本写法
- NASL脚本语言教程
- openvas-lib与nasl脚本
- Using the 'nasl' Nessus Command Line Tool
- 使用 OpenVAS 漏洞扫描软件,编写简单的nasl脚本
- 常用函数
- 常用函数
- 常用函数
- 常用函数
- 常用函数
- 常用函数
- 常用函数
- 常用函数
- 常用函数
- 常用函数
- 常用函数
- 常用函数
- 怎么查看端口占用情况?
- mysql存储过程中 乱码问题解决办法
- 2、进程和线程区别
- [转]Ultra Fractal教程系列33——关于变换的学习08——裁剪变换
- 进程调度(笔记)
- nasl常用函数
- 脚本化文档
- 【学习笔记】类的继承
- eclipse中如何把源码打进jar包(创建有源码的jar包,或者有源码如何在eclipse中查看)
- Android完全退出应用程序的方法
- 2、ubuntu中man不能查询函数的解决方法
- 3、如何设置SecureCRT的字体及背景颜色
- flot 坐标刻度 改变显示角度
- 请先给自己戴好氧气面罩