C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[23436] Re:Re:[Q] 통신포트를 감시할 수 있나요?
절대자 [] 1133 읽음    2002-12-28 11:05
임양규님 답변 주셔서 감사합니다.

그런데, 제 질문의 의도와는 좀 벗어난 답변을 주셨군요^^;

제 질문은 개인방화벽처럼 모든 통신 Port를 감시하는 기능을 질문한 것인데요.
즉, 임양규님의 소스는 해당 프로그램의 통신연결에 관한 IP를 알 수 있는 것이고 다른 프로그램이 접속하고 있는 통신Port는 검사하지 못하는데, 저는 이것을 하고 싶다는 질문이었습니다.

이것을 위해 저는 모든 port를 scan하는 방법을 사용하였는데 이 방법은 주로 해킹에 사용되는 방법입니다. 게다가 단순히 port의 connect상태만을 검사하기 때문에 자세한 정보는 모른다는 단점도 가지고 있습니다.

핵심 소스는 다음과 같습니다.

PortScan(void* lpv)
{
    char    szMessage[1024];
    char    szIp[20];
    SOCKET    fd;
    struct    sockaddr_in    addr;
    int        i;
    TVINSERTSTRUCT TI;
    HTREEITEM Node;
    HWND    hTree;

    wsprintf( szIp, "%s", gszIpAddr );

    hTree = GetDlgItem( hMainDlg, IDC_RESULT );

    TI.hParent=0;
    TI.hInsertAfter=TVI_LAST;
    TI.item.mask=TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM;
    TI.item.pszText=szIp;
    Node=TreeView_InsertItem(hTree, &TI);

    // Start Winsock
    WORD    wVersionRequested = MAKEWORD( 1, 1 );
    WSADATA    wsaData;
   
    if( WSAStartup( wVersionRequested, &wsaData ) != 0 )
    {
        wsprintf( szMessage, "WSAStartup() Error. ErrCode : %d ", GetLastError());
        MessageBox( hMainDlg, szMessage, "Error", MB_OK | MB_ICONERROR );
        return -1;
    }

    for( i = 1; i <= 65535; i++ )
    {
        if( ( fd = socket( AF_INET, SOCK_STREAM, 0 )) == INVALID_SOCKET )
        {
            wsprintf( szMessage, "socket() Error. ErrCode : %d ", GetLastError());
            MessageBox( hMainDlg, szMessage, "Error", MB_OK | MB_ICONERROR );
        }
        else
        {
            addr.sin_family = AF_INET;
            addr.sin_port   = htons(i);
            addr.sin_addr.s_addr = inet_addr( szIp );   

            wsprintf( szMessage, "%s Host : %d Port Connecting...", szIp, i );
            SendMessage( hState, SB_SETTEXT, 0, (LPARAM)szMessage );
            if( connect( fd, (struct sockaddr *)&addr, sizeof(addr)) != SOCKET_ERROR )
            {
                struct servent * sv = getservbyport( htons(i), "tcp" );

                if( sv )
                    wsprintf( szMessage, "%d ( %s )", i, sv->s_name );
                else
                    wsprintf( szMessage, "%d", i );

                TI.hParent=Node;
                TI.hInsertAfter=TVI_LAST;
                TI.item.mask=TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM;
                TI.item.pszText=szMessage;
                TreeView_InsertItem(hTree, &TI);
            }       

            closesocket( fd );
        }
    }

    WSACleanup();
    SetDlgItemText( hMainDlg, IDOK, START_STR );
    SendMessage( hState, SB_SETTEXT, 0, (LPARAM)"완료" );
    return 0;
}

--------

그래서, 다른 방법을 찾고 있습니다.

언뜻 듣기로는 VxD에 손을 대야 한다던데...


그럼 답변 감사하고요.
계속되는 도움 기다리겠습니다.

+ -

관련 글 리스트
23396 [Q] 통신포트를 감시할 수 있나요? 절대자 701 2002/12/26
31440     Re:[Q] 통신포트를 감시할 수 있나요? Julien 767 2002/12/27
23428     Re:[Q] 통신포트를 감시할 수 있나요? 임양규 834 2002/12/28
23436         Re:Re:[Q] 통신포트를 감시할 수 있나요? 절대자 1133 2002/12/28
23443             Re:Re:Re:[Q] 통신포트를 감시할 수 있나요? 임양규 798 2002/12/28
23453                 Re:Re:Re:Re:[Q] 통신포트를 감시할 수 있나요? 절대자 912 2002/12/30
23416     Re:[Q] 통신포트를 감시할 수 있나요? 임양규 986 2002/12/27
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.