端口扫描原理分析(一)

1816 8
kal 2021-8-5 21:02:53 | 显示全部楼层 |阅读模式
本帖最后由 kal 于 2021-8-5 21:09 编辑

源码如下:
本代码为MFC工程代码,本次只给出主要控件的代码。
主要函数
listen():对服务器某个TCp端口进行监听
accept():等待客户端的连接请求
connetc():进行远程连接
原理:利用connect()判定服务器的某个端口是否处于开放,并且处于监听状态。
  1. void CTCPConnectDlg::OnBnClickedButton1()
  2. {
  3.         m_BtnScan.EnableWindow(FALSE);
  4.         WSADATA wsaData;
  5.         WSAStartup(MAKEWORD(2, 2), &wsaData);

  6.         DWORD dwIpAddr  = 0;
  7.         WORD  wStartPort = 0,
  8.                   wEndPort   = 0,
  9.                   wCurrPort  = 0;//定义ip

  10.         m_IpAddr.GetAddress(dwIpAddr);
  11.         //得到ip
  12.         wStartPort = GetDlgItemInt(IDC_EDIT1, FALSE, FALSE);
  13.         wEndPort   = GetDlgItemInt(IDC_EDIT2, FALSE, FALSE);//得到起止端口



  14.         for (wCurrPort = wStartPort; wCurrPort <= wEndPort; wCurrPort++)//逐个排查端口
  15.         {
  16.                 SOCKET s = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);

  17.                 struct sockaddr_in ServAddr;
  18.                 ServAddr.sin_family = AF_INET;
  19.                 ServAddr.sin_addr.S_un.S_addr = htonl(dwIpAddr);
  20.                 ServAddr.sin_port = htons(wCurrPort);

  21.                 if (connect(s, (SOCKADDR*)&ServAddr, sizeof(SOCKADDR)) == 0)//判定端口,符合则输出
  22.                 {
  23.                         CString strPort;
  24.                         strPort.Format(L"%d",wCurrPort);
  25.                         m_ListPort.AddString(strPort);
  26.                        
  27.                 }
  28.                 closesocket(s);

  29.         }

  30.         m_BtnScan.EnableWindow(TRUE);

  31.         WSACleanup();

  32. }
复制代码

以上代码为基本原理,运行时间较长,不能作为主要工具--运行视图:



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

kal

初级红客

关注
  • 7
    主题
  • 5
    粉丝
  • 0
    关注
这家伙很懒,什么都没留下!

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2026 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行