Мне нужно использовать несколько сетевых интерфейсов в программе на Си с сокетами. Мои интерфейсы - wlan0 и eth0. Когда я подключаю eth0, пинг через wlan0 возвращает "Host unreachable", и, следовательно, сокет, который подключается через wlan0, возвращает "timedout connection timed". Если я запускаю ifconfig, он возвращает 2 интерфейса, как UP, так и с IP-адресом. Как я могу подключить как eth0, так и wlan0?

РЕДАКТИРОВАТЬ:

Мои основные вопросы: почему я не могу подключиться к Интернету с помощью wlan0, когда подключен eth0?

Мои таблицы маршрутизации:

 Kernel IP routing table
 Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
 0.0.0.0         192.168.1.254   0.0.0.0         UG    0      0        0 eth0
 10.0.0.0        0.0.0.0         255.255.255.0   U     9      0        0 wlan0
 192.168.1.0     0.0.0.0         255.255.255.0   U     1      0        0 eth0

Мои iptables:

Chain INPUT (policy ACCEPT)

target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)

target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)

target     prot opt source               destination  

Ifconfig:

 eth0      Link encap:Ethernet  HWaddr 74:d0:2b:07:3a:dd  
           inet addr:192.168.1.129  Bcast:192.168.1.255  Mask:255.255.255.0
           inet6 addr: fe80::76d0:2bff:fe07:3add/64 Scope:Link
           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
           RX packets:33194 errors:0 dropped:0 overruns:0 frame:0
           TX packets:23759 errors:0 dropped:0 overruns:0 carrier:0
           collisions:0 txqueuelen:1000
           RX bytes:31065847 (31.0 MB)  TX bytes:3057118 (3.0 MB)

 lo        Link encap:Local Loopback  
           inet addr:127.0.0.1  Mask:255.0.0.0
           inet6 addr: ::1/128 Scope:Host
           UP LOOPBACK RUNNING  MTU:65536  Metric:1
           RX packets:21018 errors:0 dropped:0 overruns:0 frame:0
           TX packets:21018 errors:0 dropped:0 overruns:0 carrier:0
           collisions:0 txqueuelen:0
           RX bytes:10519343 (10.5 MB)  TX bytes:10519343 (10.5 MB)

 wlan0     Link encap:Ethernet  HWaddr 6c:71:d9:5f:6b:7f  
           inet addr:10.0.0.6  Bcast:10.0.0.255  Mask:255.255.255.0
           inet6 addr: fe80::6e71:d9ff:fe5f:6b7f/64 Scope:Link
           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
           RX packets:34286 errors:0 dropped:0 overruns:0 frame:0
           TX packets:26667 errors:0 dropped:0 overruns:0 carrier:0
           collisions:0 txqueuelen:1000
           RX bytes:25986919 (25.9 MB)  TX bytes:3409031 (3.4 MB)

1 ответ1

0

Протокол IP и протоколы, лежащие непосредственно над ним, такие как UDP и TCP, должны быть глобальными (несмотря на NAT), быть независимыми от аппаратного обеспечения и не заботиться о безопасности. Это означает:

  • Предполагается, что любой IP-адрес может обмениваться данными с любым другим IP-адресом независимо от типа носителя (Ethernet, Token-Ring, беспроводной Ethernet, SONET и т. д.).
    • поэтому, по замыслу, существует только одна сеть верхнего уровня, иначе. один "интернет".
  • по идее безопасность не рассматривается - задача IP-пакета состоит в том, чтобы добраться от его источника к хосту с его IP-адресом назначения, и все.
    • поэтому, по замыслу, пакет IP не заботится о том, что он путешествует, пока он направляется к месту назначения
    • также, поэтому, для проекта, IP-пакету не важно, от какого сетевого интерфейса (или другого механизма - например, PPP) он выходит. Маршрутизатор будет заботиться, поскольку маршрутизатор знает, какие IP-адреса находятся за сетевым интерфейсом.
    • когда маршрутизатор или система сталкиваются с несколькими путями к одному и тому же IP, он предполагает, что любой из них будет работать одинаково, и что он может загрузить баланс между ними или переключиться на другой.

Из-за этого стандартный API сокетов C не поддерживает отправку трафика из определенного интерфейса, предполагается, что вас интересует только IP-адрес назначения, а физический уровень маршрутизации остается доступным для инфраструктуры и ОС.

Таким образом, вам придется делать такие вещи, как настройка таблиц маршрутизации ОС или использовать другие функции, специфичные для вашей ОС, для достижения желаемого.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .