当前位置: 首页 > 编程技术 > 正文

BYTE转int的实现

BYTE转int在真正的编程中多体验在MFC编写IP相关软件的地方

加入我想编写一个端口扫描器软件,这里扫描端口一定要的到IP,MFC中可以通过IP地址空间来让用户输入IP,然后通过获取IP地址控件IP的方法

来得到IP地址,至于端口等,可以通过GetDlgItemText函数来获得端口

但是,这仅仅是针对于单IP的方式,针对于单IP,我们只需要获取一次IP地址,但是针对于IP段扫描的话,那么就需要IP地址的累加了

问题也就提出来了

通过前面的文章我们可以知道GetAddress的四个参数都为BYTE型的,如果想要实现IP段的话,就必须将IP

地址的每一位转换为int型,然后自加,

举个例子:

比如我通过控件获取到的IP地址段是192.168.1.1-192.168.1.255

那么实现IP段的关键就是扫描完192.168.1.1后,将末尾的1自加,接着继续扫描192.168.1.2

同理,知道扫描到192.168.1.255

如果是跨网段的话,有可能每一位都需要自加,这里给出一些简单的参考代码,欢迎批评指正:

int s1,s2,s3,s4;  //定义int型变量
int e1,e2,e3,e4;
char s1_tmp[255],s2_tmp[255],s3_tmp[255],s4_tmp[255];  //定义char数组用于接收_itoa的第二个参数
char e1_tmp[255],e2_tmp[255],e3_tmp[255],e4_tmp[255];

//转换为10进制的ascii型
_itoa(f1,s1_tmp,10);_itoa(f2,s2_tmp,10),_itoa(f3,s3_tmp,10),_itoa(f4,s4_tmp,10);  
_itoa(x1,e1_tmp,10);_itoa(x2,e2_tmp,10);_itoa(x3,e3_tmp,10);_itoa(x4,e4_tmp,10);

//利用atoi将ascii型转换为int型,这样就得到了IP地址的每一位了
e1=atoi(e1_tmp),e2=atoi(e2_tmp),e3=atoi(e3_tmp),e4=atoi(e4_tmp);
s1=atoi(s1_tmp),s2=atoi(s2_tmp),s3=atoi(s3_tmp),s4=atoi(s4_tmp);

//a b c d 表示IP地址每一位
for(int a =s1;a<=e1;a++){
	for(int b=s2;b<=e2;b++){
		for(int c=s3 ;c<=e3;c++){
			for(int d = s4;d<=e4;d++){
				  //累加后重新组合IP地址					
				  CString NowIP;
				  char IP_tmp[255];
				  NowIP = _itoa(a,IP_tmp,10);
				  NowIP+='.';
				  NowIP+=_itoa(b,IP_tmp,10);
				  NowIP+='.';
				  NowIP+=_itoa(c,IP_tmp,10);
				  NowIP+='.';
				  NowIP+=_itoa(d,IP_tmp,10);
				//后面是一些具体的实现函数。这里不做累赘
			}
		}
	}
}


本文固定链接: http://kuaile.in/archives/549 | 蒲公英的博客

该日志由 蒲公英 于2012年03月03日发表在 编程技术 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: BYTE转int的实现 | 蒲公英的博客
关键字:

BYTE转int的实现:等您坐沙发呢!

发表评论


You must enable javascript to see captcha here!

快捷键:Ctrl+Enter