如何扫描UDP端口,请高手指教!!!!

lihaodong781206 2003-11-07 02:59:41
如何扫描UDP端口,请给出详细的思路,有源码更好,多谢!!
...全文
296 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
studyingpersons 2003-11-10
  • 打赏
  • 举报
回复
建议你最好看一下《Windows网络编程技术》的第一版。
上面讲的很详细!
lihaodong781206 2003-11-10
  • 打赏
  • 举报
回复
我按照上面的程序做了一下,可是int k=select(....)得到的k总是0,而且recvfrom的返回值为-1,什么也没收到,请帮忙解答一下,是怎么回事
lihaodong781206 2003-11-09
  • 打赏
  • 举报
回复
FD_ZERO,FA_SET和FD_ISSER这几个函数能给解释一下吗?我不太理解。
wzswgbx 2003-11-07
  • 打赏
  • 举报
回复
给个linux下的,道理相同,稍加修改即可
/*====================================================================
UDP SCAN Ver1.00
The Shadow Penguin Security (http://shadowpenguin.backsection.net)
Written by UNYUN (unewn4th@usa.net)
====================================================================
*/

#include <stdio.h>
#include <sys/socket.h>
#include <netinet/ip_icmp.h>

#define SRC_PORT 10101

int main(int argc, char *argv[])
{
struct icmphdr *icmp_header;
struct sockaddr_in target_info;
int target_info_len;
fd_set read_fd;
int scan_port;
char recvbuf[5000];
struct sockaddr_in target_addr;
int icmp_socket;
int udp_socket;

if (argc!=3){
printf("[usage] %s [TargetIP] [TargetPort] \n",argv[0]);
return -1;
}
icmp_header = (struct icmphdr *)(recvbuf+sizeof(struct iphdr));
scan_port = atoi(argv[2]);
target_addr.sin_family = AF_INET;
target_addr.sin_addr.s_addr = inet_addr(argv[1]);
target_addr.sin_port = htons(scan_port);

if ((udp_socket=socket(AF_INET,SOCK_DGRAM,0))==-1){
printf("UDP Socket Creation Error.\n");
return -1;
}
if ((icmp_socket=socket(AF_INET,SOCK_RAW,IPPROTO_ICMP))==-1){
printf("RAW Socket Creation Error.\n");
return -1;
}

sendto(udp_socket,NULL,0,0,(void *)&target_addr,sizeof(target_addr));
FD_ZERO(&read_fd);
FD_SET(icmp_socket,&read_fd);
select(FD_SETSIZE,&read_fd,NULL,NULL,NULL);
for (;;){
if (FD_ISSET(icmp_socket,&read_fd)){
target_info_len = sizeof(target_info);
recvfrom(icmp_socket,recvbuf,5000,0,
(struct sockaddr *)&target_info,&target_info_len);
if (target_info.sin_addr.s_addr == target_addr.sin_addr.s_addr
&& icmp_header->type == 3 && icmp_header->code<=12){
printf("Port %d : Close\n",scan_port);
exit(1);
}
}
}
return(0);
}

sdchl 2003-11-07
  • 打赏
  • 举报
回复
源码现在没有啊,说一下思路吧:

1.建立两个socket,一个用来发送udp包到目的端口,一个用来接受返回的icmp包。

2.判断返回的icmp数据包的类型是不是不可到达数据包,若是则说明目的端口是关闭的。

lihaodong781206 2003-11-07
  • 打赏
  • 举报
回复
To sdch:
可以给一个详细的思路吗,最好给点源码,新手,多多帮忙了,谢谢!!!!!
sdchl 2003-11-07
  • 打赏
  • 举报
回复
向目的端口发送udp包,如果端口是打开的,一般不会有反应,如果不是打开的,则会返回一个icmp数据报.
lihaodong781206 2003-11-07
  • 打赏
  • 举报
回复
有没有用VC实现的啊
xiaohyy 2003-11-07
  • 打赏
  • 举报
回复
nmap有源码

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧