TCP/IP网络程序编程——端口扫描程序UDP
程序代码
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
enum{ CMD_NAME,DST_IP,START_PORT,LAST_IP};
-
-
-
-
int main(int argc,char** argv)
-
{
-
struct icmp* icmp;
-
fd_set select_fd;
-
struct sockaddr_in send_sa;
-
int recv_sd;
-
int send_sd;
-
char buff[MAXBUFF]; //接受包使用的缓存区
-
-
int end_port;
-
int start_port;
-
int dstport;
-
struct timeval tv;
-
-
if(argc!=4)
-
{
-
fprintf(stderr," usage:%s dst_ip start_port end_port\n",argv[CMD_NAME]);
-
exit(EXIT_FAILURE);
-
}
-
-
send_sa.sin_addr.s_addr=inet_addr(argv[DST_IP]);
-
send_sa.sin_family=AF_INET;
-
-
start_port=atoi(argv[START_PORT]);
-
end_port=atoi(argv[LAST_IP]);
-
-
CHKADDRESS(send_sa.sin_addr.s_addr);
-
-
if((send_sd=socket(AF_INET,SOCK_DGRAM,0))<0)
-
{
-
perror("socket(sock_raw)");
-
exit(EXIT_FAILURE);
-
}
-
-
if((recv_sd=socket(AF_INET,SOCK_RAW,IPPROTO_ICMP))<0)
-
{
-
perror("scok_raw");
-
exit(EXIT_FAILURE);
-
}
-
-
-
for(dstport=start_port;dstport<=end_port;dstport )
-
{
-
printf("scan port %d\r",dstport);
-
fflush(stdout);
-
-
send_sa.sin_port=htons(dstport);
-
sendto(send_sd,NULL,0,0,(struct sockaddr*)&send_sa,sizeof(send_sa));
-
-
tv.tv_sec=1;
-
tv.tv_usec=0;
-
-
while(1)
-
{
-
FD_ZERO(&select_fd);
-
FD_SET(recv_sd,&select_fd);
-
-
if(select(recv_sd 1,&select_fd,NULL,NULL,&tv)>0)
-
{
-
struct ip* ip;
-
int hlen;
-
int port;
-
-
-
if(recvfrom(recv_sd,buff,MAXBUFF,0,NULL,NULL)!=56)
-
{
-
continue;
-
}
-
-
ip=(struct ip*)buff;
-
hlen=ip->ip_hl<<2;
-
icmp=(struct icmp*)(buff hlen);
-
-
//取出接收到信息的端口号
-
port=ntohs(*(u_short*)(buff 20 8 20 2));
-
-
//icmp不能到达的包类型为3,检查IP地址以及初始端口号是否一致
-
if((ip->ip_src.s_addr!=send_sa.sin_addr.s_addr)||(icmp->icmp_type!=ICMP_UNREACH)||(icmp->icmp_code!=ICMP_UNREACH_PORT)||(port!=dstport))
-
continue;
-
}
-
else{
-
struct servent *se;
-
se=getservbyport(htons(dstport),"udp");
-
printf("] %-20s \n",dstport,(se==NULL)?"unknown":se->s_name);
-
}
-
break;
-
}
-
}
-
return EXIT_SUCCESS;
-
}
运行结果
部分说明
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgfchfc
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01