2011-12-23 2 views
1

원격 포트가 열려 있거나 차단되어 있는지 확인하기 위해 포트 쿼리 응용 프로그램이 있습니다. 내가하고 싶은 일은 포트 검사를 할 때 로컬 컴퓨터에서 트래픽을 보낼 네트워크 인터페이스를 선택할 수있는 기능입니다. 이것이 가능한가요, 어떻게 그렇게 할 수 있습니까?프로그래밍 방식으로 네트워크 인터페이스에서 데이터 보내기

업데이트 :

나는 다음과 같은 라인을 추가하고 여전히 소켓을 사용하는 가정

string localip; 
    localip = interfacesComboBox.Text; 
    Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 
socket.ReceiveTimeout = 1000; 
IPAddress myIP = IPAddress.Parse(localip); 
socket.Bind(new IPEndPoint(myIP, 0)); 

답변

2
private ushort BindToNextAvail(Socket sock, params ushort[] portList) 
    { 
     foreach (ushort i in portList) 
     { 
      try 
      { 
       sock.Bind(new IPEndPoint(IPAddress.Any, i)); 
       return (ushort)((IPEndPoint)sock.LocalEndPoint).Port; 
      } 
      catch 
      { 
       Logger.Instance().WriteLog(EventLogEntryType.Warning, "Unable to use port " + i.ToString()); 
      } 
     } 

     return 0; 
    } 

내 라이브 응용 프로그램에서 가져온 것이므로 대략 당신에게 도움이됩니다.

그리고 메소드가 호출되는 경우의 예 :

Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); 
socket.ReceiveTimeout = 1000; 

if (Bind(socket, 10000, 10001, 10002) == 0) 
    throw new SocketException(10049); // "Cannot assign requested address" exception 
+1

...이 코드의 대부분은 중복입니다. 특정 인터페이스에 바인딩하기 위해서 필요한 것은'.Bind (새로운 IPEndPoint (addresOfEndpoint, 0))'뿐입니다. '0'은 시스템이 사용 가능한 포트를 자동으로 선택하도록합니다. –

+0

@MattiVirkkunen - 이것이 사실일지도 모르지만이 코드는 선택적으로 사용자가 ** 묶고 싶은 일련의 포트를 지정할 수있게합니다. 필연적으로 요구 사항은 아니지만 제 응용 프로그램에서 잘 작동합니다. –

+0

@MattiVirkkunen, 나는 당신의 방법을 시도했다 : 그것은 작동하지 않는다, 나의 이더 네트 공용 영역 및 나의 WiFi 아닙니다에서 아직도 전달하고있다 'string localip; localip = interfacesComboBox.Text; 소켓 소켓 = 새 소켓 (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); socket.ReceiveTimeout = 1000; IPAddress myIP = IPAddress.Parse (localip); – KPS

1

결합되지 않고, 연결하기 전에 Bind 메서드를 호출합니다. 로컬 엔드 포인트의 IP를 지정하여 사용할 네트워크 인터페이스를 지정할 수 있습니다.

관련 문제