Программная отправка данных через сетевой интерфейс - PullRequest
1 голос
/ 23 декабря 2011

У меня есть приложение запроса порта, которое проверяет удаленный порт, чтобы увидеть, открыт ли он или заблокирован. То, что я хочу сделать, это при проверке порта, возможность выбрать, какой сетевой интерфейс на моей локальной машине для отправки трафика. Возможно ли это и как мне это сделать?

Обновление:

Я добавил следующие строки, и это все еще не является обязательным

    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 ]

2 голосов
/ 23 декабря 2011
    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 голос
/ 23 декабря 2011

Если вы используете сокеты, перед подключением вызовите метод Bind . Он позволяет указать используемый сетевой интерфейс, указав IP-адрес локальной конечной точки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...