DNS数据包

.386
.model flat, stdcall
option casemap :none
include   windows.inc
include   user32.inc
includelib user32.lib
include   kernel32.inc
includelib kernel32.lib
include   wsock32.inc
includelib wsock32.lib

;;DNS头部数据包结构定义
dns_head struct
id    dw ?   ;16位标识
logo   dw ?   ;16位标志
query   dw ?   ;16位问题记录数
answer dw ?   ;16位回答记录数
autho   dw ?   ;16位授权记录数
addit   dw ?   ;16位附加记录数
dns_head ends
;;DNS查询数据包结构定义
dns_Query struct
qtype   dw ?   ;16位查询类型,比如1代表A记录,15代表MX记录
qclass dw ?   ;16位查询类,这里只用1,代表互联网
dns_Query ends
;;DNS响应数据包结构定义
dns_Answer struct
TTL   dd ?   ;生存时间
Alength dw ?   ;资源长度
dns_Answer ends

.data?
dns_Query_Name db 512 dup (?) ;查询名字缓冲区
dns_Qnswer_Res db 512 dup (?) ;资源数据缓冲区
s dd ?
SendBuf db 64 dup (?) ;缓冲区
Sendlen dd ?   ;缓冲区有效长度
stWsa   WSADATA <>
stsin   sockaddr_in <>
iphead ip_head <>
tcphead tcp_head <>
wtcp   wtcp_h <>

.data
flag db TRUE

.const
dns_s db '61.147.37.1',0 ;DNS服务器地址
dns_c db '126.com',0 ;域名

.code
start:
;初始化SOCKET并发送数据
invoke inet_addr,addr dns_s   ;转换IP地址为网络顺序
mov stsin.sin_addr,eax   ;转换后的IP地址保存到结构里
mov stsin.sin_family,AF_INET
invoke htons,25   ;把端口转换为网络顺序
mov stsin.sin_port,ax   ;转换后端口保存到结构里
invoke WSAStartup,2h,addr stWsa   ;装载SOCKET
invoke socket,AF_INET,SOCK_RAW,IPPROTO_RAW ;初始化SOCKET为原始套接字模式
mov s,eax   ;保存初始化成功的句柄
invoke setsockopt,s,IPPROTO_IP,1,addr flag,sizeof flag
invoke WSAGetLastError
invoke sendto,s,addr SendBuf,sizeof iphead+sizeof tcphead,0,addr stsin,sizeof sockaddr_in   ;发送缓存里的字符到服务器
invoke closesocket,s   ;关闭SOCKET
invoke WSACleanup   ;卸载SOCKET
invoke ExitProcess,NULL   ;程序退出
end start

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值