安全扫描技术课程设计(7)
发布时间:2021-06-07
发布时间:2021-06-07
tcp端口扫描及tcp服务器搭建
2)关键的函数实现相应的模块
a) WSADATA结构的初始化及套接字的启用 WSAStarup函数:
int WSAStarup(WORD wVersionRequested, LPWSADATA lpWSAData ); 程序在使用Socket之前必须使用WSAStarup函数。该函数的第一个参数wVersionRequested:一个WORD(双字节)型数值,指定了应用程序需要使用的Winsock规范的最高版本 ;第二个参数lpWSAData: 指向WSADATA数据结构的指针,用来接收Windows Sockets实现的细节。函数执行成功后返回0.
WSACleanup函数: int WSACleanup(void);
程序在完成对请求的Socket库的使用后,要调用WSACleanup函树来解除与Socket库的绑定并且释放Socket库所占用的系统资源。
b) 将新产生的套接字与指定端口相连
当调用socket函数创建套接字后,该套接字并没有与本机地址和端口等信息相连,bind函数将完成这些工作。
bind函数:
bind函数中的sockfd参数为调用socket函数后返回的文件描述符。my_addr参数为指向sockaddr结构体的指针(该结构体中保存有端口和IP地址信息)。addlen参数为结构体sockaddr的长度。
错误信息:
EACCES:地址受到保护,用户非超级用户。 EADDRINUSE:指定的地址已经在使用。 EBADF:sockfd参数为非法的文件描述符。 EINVAL:socket已经和地址绑定。
ENOTSOCK:参数sockfd为文件描述符。
c) 监听并接受客户端服务
为了接受连接,先用socket()创建一个套接口,然后用listen()为申请进入的连接建立一个后备日志,然后便可用accept()接受连接了。listen()仅适用于支持连接的套接口,如SOCK_STREAM类型的。套接口s处于一种“变动”模式,申请进入的连接请求被确认,并排队等待被接受。这个函数特别适用于同时有多个连接请求的服务器;如果当一个连接请求到来时,队列已满,那么客户将收到一个WSAECONNREFUSED错误。
当没有可用的描述字时,listen()函数仍试图正常地工作。它仍接受请求直至队列变空。当有可用描述字时,后续的一次listen()或accept()调用会将队列按照当前或最近的“后备日志”重新填充,如有可能的话,将恢复监听申请进入的连接请求。
d) 通信模块的实现
本程序中服务器与客户端的通信即实现双方的信息收发,具体实现方法为调用相应的功能函数,Socket send函数和recv函数。
e) 完成与客户端的秘密服务
下一篇:利乐(中国)有限公司