У меня есть приложение, которое разделено на несколько частей (процессы), связывающиеся по TCP/IP, с помощью предопределенного порта на localhost.
Это всегда безопасно? Может некоторый брандмауэр (корпоративный, локально установленный, брандмауэр Windows, и т.д.) блокируют этот трафик? Или могут некоторые пользовательские настройки в ОС блокировать этот трафик?
Ose, которыми я интересуюсь, являются Windows (XP до 7) и Linux (Ubuntu, Red Hat Linux и SUSE).
Трафик к 127.0.0.0/8
и к ::1/128
обрабатывается внутренне стеком TCP/IP. Это не достигает карты физической сети и никогда не оставляет компьютер, таким образом, это не может быть заблокировано корпоративными брандмауэрами.
Так как петлевые сокеты очень характерны для IPC, хорошие брандмауэры никогда не должны блокировать его. (Windows Firewall не делает.) Однако существуют некоторые чрезмерно параноидальные... В таких случаях, тем не менее, я обвинил бы брандмауэр, не Ваше программное обеспечение.
На Unix возможно (accidentially) снизить петлевой интерфейс (обычно lo
). Снова, это очень необычно.
Вместо hardcoded порта, socketpair()
должен использоваться, когда применимо, для предотвращения коллизий порта.
Еще лучше должен был бы использовать сокеты Unix на Linux и именованные каналы в Windows.
Все эти Ose поддержка под управлением программное обеспечение брандмауэра. Они могли заблокировать localhost соединения, хотя это не очень обычно (по моему опыту).
Существует много приложений/сервисов, которые делают это. Просто попытайтесь работать netstat -an
на Вашем поле: возможности - Вы, будет видеть довольно много приложений с открытыми сокетами слушания на 127.0.0.1
.
Я не знаю о пользовательских настройках, которые могли препятствовать тому, чтобы это работало над Linux. Никакая идея для Windows. Но снова, это - общая техника.