c+포트 스 캔 프로그램 구현 사례

첫째,원리
포트 스 캔 의 원 리 는 간단 합 니 다.socket 통신 을 구축 하고 포트 가 통 하지 않 습 니 다.connect 함 수 를 통 해 성공 하면 포트 개발 자 를 대표 합 니 다.그렇지 않 으 면 포트 가 닫 힙 니 다.
다 중 socket 프로그램 이 필요 합 니 다.이 내용 은 window 환경 에서 이 루어 집 니 다.
둘째,단일 스 레 드 실현 방식

// PortScanf.cpp :              。
//
#define WIN32_LEAN_AND_MEAN
#include "stdafx.h"
#include <WinSock2.h>
#pragma comment(lib, "Ws2_32")
int scant(char *Ip, int StartPort, int EndPort)
{ 
  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  
 
  for (CurrPort = StartPort; CurrPort <= EndPort; CurrPort++)
  {
    s = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
    server.sin_port = htons(CurrPort); //     IP      
    ret = connect(s, (struct sockaddr *)&server, sizeof(server)); //  
 
    if (0 == ret) //        
    {
      printf("%s:%d Success O(∩_∩)O~~
", Ip, CurrPort); closesocket(s); } else { printf("%s:%d Failed
", Ip, CurrPort); } } printf("Cost time:%f second
", CostTime); // WSACleanup(); // return 1; } int main() { scant("127.0.0.1", 75, 100); return 0; }

셋째,다 중 스 레 드 실현 방식
단일 스 레 드 의 실행 속도 가 좀 느 리 기 때문에 우 리 는 다 중 스 레 드 운행 에 가입 합 니 다.

typedef struct _tagValue
{
  int start;
  int end;
}PortNums;
 
void _cdecl beginThreadFunc1(LPVOID lpParam) {
  PortNums *pnInt = (PortNums*)lpParam;
  scan("127.0.0.1", pnInt->start, pnInt->end);
}
 
int a()
{
  PortNums m1;
  m1.start = 70;
  m1.end = 500;
 
  PortNums m2;
  m2.start = 501;
  m2.end = 1000;
 
  _beginthread(beginThreadFunc1, 0, &m1);
  _beginthread(beginThreadFunc1, 0, &m2);
 
 
  getchar();
  return 0;
}
필요 합 니 다\#include

이상 의 c+포트 스 캔 프로그램의 실현 사례 는 바로 편집장 이 여러분 에 게 공유 한 모든 내용 입 니 다.여러분 께 참고 가 되 고 저희 도 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기