환경: C++ Builder XE5
icmp protocol를 통해 Target Server에 Ping Test를 하려 합니다.
Local PC는 두 개의 LAN Card가 있고,
Ping Test 시 어떤 LAN Card에서 할 지 지정하고 싶습니다.
기존 소스는 아래와 같습니다.
//..
hIcmpFile = IcmpCreateFile(); // icmp client를 만든다.
//...
dwRetVal = IcmpSendEcho(hIcmpFile, ipaddr, SendData, sizeof(SendData),
NULL, ReplyBuffer, ReplySize, 1000);
// do something..
IcmpCreateFile()를 사용하면 라우팅 테이블에 따라
우선순위가 높은 LAN Card(IF)로 Bind되어 통신 합니다.
원하는 것은 IcmpCreateFile() 시에 특정 LAN Card(IF)를 지정하거나,
아예 RAW Socket을 그대로 이용하여 Socket 생성, Bind(), Connect()하는 방식인데..
RAW Socket을 이용할 경우 ICMP Protcole을 모두 만족해줘야 하는 부담이 있어서..
종합하면,
ICMP를 통한 Ping Test를 하되, 특정 LAN Card(IF)를 지정할 수 있는 방법이 있을까요?
IndyIcmpClient도 살펴 보았는데, Class 상속관계를 좀 살펴보았는데..
불가능한 것으로 보입니다.
고수님들의 고견을 청합니다.
감사합니다.
* 첨부 설명 *
이렇게 하는 이유는 PC에서 서버로 데이터를 전송하는데,
서비스 가용성을 높이기 위해서 PC에 두 개의 네트워크(유선 LAN=>KT Line,
무선 LAN=>LTE Modem)을 설치하고, 유선 LAN 카드로 통신하다가 통신 장애가
발생하면 무선 LAN 카드로 전환하여 통신하려 합니다.
이를 위해 유선이든 무선이든 지속적으로 Ping 테스트를 하고, Ping Test 실패시
유선 => 무선으로 전환, 무선 => 유선으로 전환합니다. 유선 <=> 무선의 전환은
각 Lan Card의 할당된 Metric 값을 조정하여 합니다.
따라서, Ping 테스트 시 유선인 지 무선인 지 명시적으로 선택하여 Ping Test를
실시할 필요가 있습니다.