2012-03-22 3 views
1

변수가 IP 주소입니다. 내 Access 2010 데이터베이스에 텍스트로 저장됩니다. ipSrc를 사용하여이 쿼리를 실행하려고하는데 쿼리가 항상 실패합니다. 내 추측은 IPSrc를 실제 IP 주소가 아닌 ipSrc로 보는 것입니다. 나는 'ipSrc'로 시도해 보았고 평범한 ipSrc와 두 재방 전 모두 실패했다. ""ipSrc ""시도도 실패했습니다. 이것은 실패했다. '& ipSrc'. 다음은 그 진술입니다.변수를 SQL에 전달

SQLCHAR* query = (SQLCHAR*)"SELECT tblIP.[IPAddress], tblIP.[IPType], tblIP.[IPStatus], tblIP.[IPMax] FROM tblIP WHERE tblIP.[IPAddress]= ipSrc AND tblIP.[IPType]=3 AND tblIP.[IPStatus]=1 AND tblIP.[IPMax]=0;"; 

이며 여기에 ipSrc가 정의되어 있습니다.

translate_ip(ip_header->source_ip, ipSrc); 

printf를 사용하면 실제 IP 주소로 인쇄됩니다.

printf("\n Source  IP: %s", ipSrc); 

답변

4

ipSrc이 그냥있는 그대로를 통과 할거야, 특별하게 취급되어야한다는 것을, 당신이 무슨에서, 코드가 알 수있는 방법은 없습니다.

아마도 C++ 문자열로 쿼리 문자열을 동적으로 구성한 다음 쿼리를 채울 수 있습니다. 다음과 같이하십시오 :

std::string strqry = 
     "SELECT tblIP.[IPAddress], " 
    + "  tblIP.[IPType], " 
    + "  tblIP.[IPStatus], " 
    + "  tblIP.[IPMax] " 
    + "FROM tblIP " 
    + "WHERE tblIP.[IPAddress] = '" + ipSrc + "' " 
    + "AND  tblIP.[IPType] = 3 " 
    + "AND  tblIP.[IPStatus] = 1 " 
    + "AND  tblIP.[IPMax] = 0" 
    + ";"; 

SQLCHAR *query = (SQLCHAR *)(strqry.c_str()); 

// Now use query 

그리고 ipSrc 값을 제어해야합니다. 그렇지 않으면 SQL 주입 공격을받을 수 있습니다 (이 경우 준비/매개 변수가있는 명령문을 사용하려는 경우).