LINUX.ORG.RU

bind: чего-то я не догоняю...


0

0

вот смотрите - в "Программировании сетевых приложений" Стивенса написано следующее:
A process can bind a specific IP address to its socket... For TCP server it restricts the socket to receive incoming client connections destined only to that IP address.

ОК, пишем такой код:
struct sockaddr_in servaddr;
...
inet_aton("192.168.134.178", &servaddr.sin_addr);
servaddr.sin_port = htons(5113);
bind(listenfd, (struct sockaddr *) &servaddr, sizeof(servaddr));

Компилируем, запускаем:
$ netstat -pla | grep 5113
tcp 0 0 192.168.134.178:5113 *:* LISTEN 27451/a.out
То есть как будто бы прибиндился нормально, больше никто не слушает порт 5113.

На машине несколько карточек:
eth0 с IP 192.168.133.178
eth1 с IP 192.168.134.178 (разница в 3 октете)

Делаем с этой машины коннект на себя:
telnet 192.168.133.178 5113 - connection refused
telnet 192.168.134.178 5113 - connection ok

А теперь фокус:
Винда, IP адрес 192.168.133.200, коннектимся к 192.168.133.178 (туда, где нас должны отшить) и получаем соединение!
$ netstat -pla | grep 5113
tcp 0 0 192.168.134.178:5113 *:* LISTEN 27451/a.out
tcp 0 0 192.168.134.178:5113 192.168.133.200:1149 TIME_WAIT -

Вот вывод tcpdump:
$ sudo tcpdump -nn host 192.168.133.178 and port 5113
12:38:00.752076 IP 192.168.133.200.1127 > 192.168.133.178.5113: S 2609228336:2609228336(0) win 65535 <mss 1460,nop,nop,sackOK>
12:38:00.752281 IP 192.168.133.178.5113 > 192.168.133.200.1127: S 754062038:754062038(0) ack 2609228337 win 5840 <mss 1460,nop,nop,sackOK>
12:38:00.752505 IP 192.168.133.200.1127 > 192.168.133.178.5113: . ack 1 win 65535
12:38:00.752613 IP 192.168.133.178.5113 > 192.168.133.200.1127: P 1:27(26) ack 1 win 5840
12:38:00.752624 IP 192.168.133.178.5113 > 192.168.133.200.1127: F 27:27(0) ack 1 win 5840
12:38:00.752955 IP 192.168.133.200.1127 > 192.168.133.178.5113: . ack 28 win 65509
12:38:00.756327 IP 192.168.133.200.1127 > 192.168.133.178.5113: F 1:1(0) ack 28 win 65509
12:38:00.756343 IP 192.168.133.178.5113 > 192.168.133.200.1127: . ack 2 win 5840

$ sudo iptables -L
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


Кто нибудь может мне объяснить происходящее? :)

Ответ на: комментарий от logIN

> # iptables -t nat -L

да, проблема была в этом, спасибо!
только я до сих пор не догоняю, почему бы не написать iptables чтобы он при iptables -L выводил еще и натовскую табличку

BreadFan ★★
() автор топика
Ответ на: комментарий от BreadFan

> только я до сих пор не догоняю, почему бы не написать iptables чтобы он при iptables -L выводил еще и натовскую табличку

...а заодно и mangle и температуру процессора и погоду за окном.

Anoxemian ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.