MAKEWORD()函数

#include <iostream>
#include <map>
#include <iostream>
#include <windows.h>

using namespace std;
 
void myPrintf(void *a)
{
	cout<<"hello"<<endl;
} 
int main()
{
	
//	int *a=new int(10);//一个数 
//	cout<<*a<<endl;//10
//	delete a;
//	
//	int *arr=new int[10];//数组 
//	for(int i=0;i<10;i++)
//	{
//		arr[i]=i+1;
//	}
//	for(int i=0;i<10;i++)
//	{
//		cout<<arr[i]<<' ';
//	}
//	cout<<endl;
//	delete []arr;
//	
//	int num=10;
//	int *ptr=&num;
//	*ptr=20;
//	cout<<*ptr<<endl;//20
//	cout<<num<<endl;//20 
//	myPrintf(ptr);
//	
//	string str="hello,world,world";
//	cout<<str.find("world")<<endl;//6 
//	cout<<str.find(',')<<endl;//5 第一次出现的位置 
//	cout<<str.rfind("world")<<endl;//12 最后一次出现的位置
//	 
//
//	map<string,int> m;
//	m.insert(pair<string,int>("jkl",18)); 
//	m.insert(pair<string,int>("lyf",20)); 
//	m.insert(pair<string,int>("fbb",19)); 
//	cout<<m["jkl"]<<endl;//输出key对应的value 
//	cout<<m["lyf"]<<endl;
//	cout<<m["fbb"]<<endl;
	
	
	//vector可以动态扩展,数组是静态空间	  192
	//空指针使用NULL,不能使用0
	//oop Object Oriented Programming  面向对象编程 
	
	//SSH(Secure Shell,安全外壳)是一种网络安全协议
	//SSH协议通过对网络数据进行加密和验证,在不安全的网络环境中提供了安全的网络服务。
	
	//Linux下信号处理函数
	
	//linux抓包指令 tcpdump 
	
    //在Windows的网络编程中,需要先初始化Winsock库
	//而MAKEWORD函数就可以用于指定请求的Winsock版本	
	//包含在两个头文件<windows.h>  <winsock2.h>  
	//MAKEWORD函数是Windows编程中的一个宏。
	//该宏将两个字节组合成一个WORD类型的值,WORD类型通常为16位的无符号整数 
//	WSADATA wsaData;
//    int iResult;
//
//    // Initialize Winsock
//    //MAKEWORD(2,2)表示请求使用2.2版本的Winsock库
//    iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
//    if (iResult != 0) 
//	{
//    	printf("WSAStartup failed: %d\n", iResult);
//        return 1;
//    }
    BYTE bLow = 0x12;
    BYTE bHigh = 0x34;

	WORD wResult = MAKEWORD(bLow, bHigh);

	printf("The result is: %04X\n", wResult);//3412

	//linux下头文件<execinfo.h> 
    return 0;
}

  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
端口扫描软件的代码在网上很多,可是并不一定适合基础不深的鸟鸟们学。要不就是代码大多都很长而且使用了多线程(关于多线程的很多概念就够闹腾的了,扫描部分就更算了),让我等小菜都望而生畏;要不就是速度很慢,学会了也派不上用场。今天我就介绍一下自己学习winsock后写的端口扫描软件吧! 端口扫描软件的基本思路就不说了,没有什么很难的算法,大家想想就应该知道的,只要从起始端口到结尾端口都遍历一遍,找到打开的端口输出就可以了。大体的就是这个样子:for(CurrPort=StartPort;CurrPort<=EndPort;CurrPort++) {scan的执行体; }。这个软件没有使用到多线程技术,也就不用考虑那么多的关于多线程的概念了。因此我们的这个扫描软件从两个方面来讨论,第一方面是如何可以找到打开的端口,第二方面是如何提高扫描端口的速度。 一、找到打开的端口 在介绍如何找到打开的端口以前,让我们先来认识一个函数——connect()。connect函数将一个流套接字连接到指定IP地址的指定端口上。connect函数的用法:int connect(SOCKET s,const struct sockaddr FAR* name,int namelen);参数s指定用于连接的套接字句柄,name参数指向一个sockaddr_in结构,用来指定要连接到的服务器的IP地址和端口,namelen参数则指定sockaddr_in结构的长度。这个参数连接成功的时候,函数返回0,否则返回值是SOCKET_ERROR。connect函数的用法大体我们就说这么多了。说到这里大家应该想到了吧?我们用connect函数的返回值进行判断,找到打开的端口号。好,看下具体的代码,有详细的注释,如果对函数不明白可以到MSDN或网上查询。 int scan(char *Ip, int StartPort, int EndPort) { clock_t StartTime,EndTime; //扫描的开始时间和结束时间 float CostTime; //扫描过程中耗费的时间 WSADATA wsa; SOCKET s; struct sockaddr_in server; int CurrPort; //当前端口 int ret; WSAStartup(MAKEWORD(2,2),&wsa); //使用winsock函数之前,必须用WSAStartup函数来装入并初始化动态连接库 server.sin_family=AF_INET; //指定地址格式,在winsock中只能使用AF_INET server.sin_addr.s_addr=inet_addr(Ip); //指定被扫描的IP地址 StartTime=clock(); for(CurrPort=StartPort;CurrPort<=EndPort;CurrPort++) { s=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); //创建套接字 /* SOCKET socket(int af,int type,int protocol); 为通信连接创建一个套接字 af参数: 指定套接字地址格式,在winsock中只能使用AF_INET type参数: 套接字类型,这里使用了SOCK_STREAM,流套接字 protocol参数:配合type使用,指定协议类型,这里使用IPPROTO_TCP(就是TCP协议) */ server.sin_port=htons(CurrPort); //指定被扫描IP地址的端口号 ret=connect(s,(struct sockaddr *)&server,sizeof(server)); //连接 if(0==ret) //判断连接是否成功 { printf("%s:%d\n",Ip,CurrPort); closesocket(s); } } EndTime=clock(); CostTime=(float)(EndTime-StartTime)/CLOCKS_PER_SEC; printf("Cost time:%f second\n",CostTime); //输出扫描过程中耗费的时间 WSACleanup(); //释放动态连接库并释放被创建的套接字 return 1; }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值