本帖最后由 kal 于 2021-8-5 21:09 编辑
源码如下:
本代码为MFC工程代码,本次只给出主要控件的代码。
主要函数:
listen():对服务器某个TCp端口进行监听
accept():等待客户端的连接请求
connetc():进行远程连接
原理:利用connect()判定服务器的某个端口是否处于开放,并且处于监听状态。- void CTCPConnectDlg::OnBnClickedButton1()
- {
- m_BtnScan.EnableWindow(FALSE);
- WSADATA wsaData;
- WSAStartup(MAKEWORD(2, 2), &wsaData);
- DWORD dwIpAddr = 0;
- WORD wStartPort = 0,
- wEndPort = 0,
- wCurrPort = 0;//定义ip
- m_IpAddr.GetAddress(dwIpAddr);
- //得到ip
- wStartPort = GetDlgItemInt(IDC_EDIT1, FALSE, FALSE);
- wEndPort = GetDlgItemInt(IDC_EDIT2, FALSE, FALSE);//得到起止端口
- for (wCurrPort = wStartPort; wCurrPort <= wEndPort; wCurrPort++)//逐个排查端口
- {
- SOCKET s = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
- struct sockaddr_in ServAddr;
- ServAddr.sin_family = AF_INET;
- ServAddr.sin_addr.S_un.S_addr = htonl(dwIpAddr);
- ServAddr.sin_port = htons(wCurrPort);
- if (connect(s, (SOCKADDR*)&ServAddr, sizeof(SOCKADDR)) == 0)//判定端口,符合则输出
- {
- CString strPort;
- strPort.Format(L"%d",wCurrPort);
- m_ListPort.AddString(strPort);
-
- }
- closesocket(s);
- }
- m_BtnScan.EnableWindow(TRUE);
- WSACleanup();
- }
复制代码
以上代码为基本原理,运行时间较长,不能作为主要工具--运行视图:
|