2017-01-11 6 views
0

클라이언트 소켓의 경우 bind()를 사용하여 특정 소스 IP 주소에 바인드하여 특정 인터페이스를 선택할 수 있습니다. 또는 connect()를 직접 사용할 수 있습니다. 그러면 라우팅 테이블을 기반으로 소스 IP를 선택합니다.IP에 클라이언트 소켓을 바인드 할 수 있습니까? 인터페이스에 속하지 않습니까?

IP에 클라이언트 소켓을 바인드 할 수 있습니까? 인터페이스에 속하지 않으십니까? 예 : 두 개의 인터페이스가 있습니다. eth0 : ip0 eth1 : ip1

(1) 클라이언트 소켓을 ip2에 바인드하면 어떻게됩니까? 이것이 가능한가? (2) (1)이 가능하면 클라이언트 소켓이 eth0를 통해 패킷을 전송한다고 가정합니다. 그런 다음이 클라이언트 호스트의 iptables를 구성하여 들어오는 모든 패킷을 ip0 (eth0)으로 전달합니다. 이 경우 대상 IP 주소가있는 서버 쪽에서 보낸 패킷이 ip2 (이 패킷이 내 클라이언트 호스트에 도달한다고 가정 할 경우)입니다. 내 클라이언트 소켓에서 패킷을 수신합니까?

미리 감사드립니다.

답변

0

난 정말 당신의 질문을 이해하지만, 여기에 간다하지 않습니다 클라이언트 소켓의 경우

, 당신은 일반적으로 원하는 운영 체제 및 사용 가능한 포트를 사용하기위한 최적의 인터페이스를 선택하는 라우팅 테이블. 어떤 경우에는 INADDR_ANY (0) 및 포트 0에 바인드합니다. 또는 bind를 명시 적으로 호출하지 마십시오. 그냥 connect()를 호출하면 올바르게 작동 할 것입니다.

특정 인터페이스을 통해 클라이언트 연결을 수행해야하는 경우 소켓을 특정 IP 주소에 바인딩하십시오. 그러면 OS는 후속 연결 호출과 그 이후의 모든 트래픽에 대해 해당 인터페이스를 사용하려고 시도합니다.

로컬 인터페이스에 속하지 않는 IP에 소켓을 바인드하려고하면 오류가 발생합니다.

iptables에 대해 무슨 뜻인지 확실하지 않습니다. 소름 끼치는 소리.

+0

내가하려고하는 것은 프로그램이 네트워크 트래픽 생성기로 작동한다는 것입니다. 클라이언트 호스트와 서버 호스트 및 스위치가 중간에 있습니다. 클라이언트와 서버 사이에 트래픽을 보내려고하는데 이러한 트래픽에는 여러 클라이언트 IP 서버 IP 쌍이 있어야합니다 (여러 가입자와 서버가있는 경우를 시뮬레이트). 예 : : 클라이언트 ips 범위는 20.0.0.0 - 20.0.0.9, 서버 ips 범위는 21.0.0.0 - 21.0.0.9 이 경우 클라이언트 호스트에 10 개의 소켓이 있어야하며 각 호스트는 20.0.0.0의 IP와 바인딩해야합니다 - 20.0.0.9. 하지만 내 인터페이스에는 다른 IP가 있습니다 (적어도이 IP는 모두 가지고 있습니다). – buddha

+0

iptables는 linux에서 방화벽 규칙을 설정하는 데 사용되는 linux 명령입니다. – buddha