Представьте себе Windows-коробку, которая:
- размещает службу WCF
- имеет несколько сетевых карт
- сидит позади NAT
Когда пользователь отправляет запрос в службу (поверх инфраструктуры WCF), он использует внешний адрес, назначенный целевой машине NAT.
Мне нужно написать некоторый фрагмент кода внутри службы WCF, который должен знать, какой из нескольких сетевых адаптеров, использованных машиной, использовался для фактической обработки сетевого трафика. То, как этот код идентифицирует NIC, менее важно - это может быть его MAC-адрес (лучший) или (внутренний) IP-адрес NIC.
Как я могу это сделать?
EDIT1
Я постараюсь указать контекст вопроса. Есть два агента. Оба предоставляют один и тот же сервис WCF. Кроме того, одному из агентов можно поручить начать зондирование сети по отношению ко второму агенту следующим образом:
- Агента A просят проверить сеть с агентом B
- Агент A согласовывает с агентом B порт UDP, который будет использоваться для проверки с использованием службы WCF, предоставляемой агентом B.
- Как только согласование закончено, агент A запускает некоторый пользовательский протокол через UDP, где агент B действует как сервер - то есть он связывается с портом UDP, согласованным в предыдущем элементе.
Для привязки к порту UDP требуется две части - IP-адрес и порт UDP, где IP-адрес может быть либо конкретным IP-адресом, либо * (для привязки ко всем IP-адресам, связанным с аппаратом). Последний вариант нам не подходит - я опущу причины. Это оставляет нам первый вариант - привязка к конкретному IP-адресу. Однако, когда агент B находится за NAT, IP-адрес, используемый для связи со службой WCF, является внешним IP-адресом, назначенным агенту NAT. С другой стороны, для связывания требуется соответствующий внутренний IP-адрес - как его получить?