"Исходный порт" означает порт, от которого удаленная машина отправила пакет на Ваш сервер. Редко, если когда-нибудь, пакеты клиента к серверу, отправленные от того же удаленного порта, в который они прибывают. Это происходит из-за ограничения в большинстве Ose, которые диктуют, что обычные пользователи не могут открытые порты ниже определенного предела (в Linux, это - любой порт ниже 1024).
Следовательно, исходный порт пакетов, направляемых к Вашей машине, скорее всего, прибывает из случайного, порта с высоким номером на удаленном хосте. В сущности номер порта действительно не имеет значения и не может также быть указан.
Правило выше ожидаемых пакетов для прибытия из удаленного порта 137-139 и не ловит их, если они не делают. Удалите --sport 137:139
и это должно принять трафик к Вашему порту 137-139 от случайного высокого порта удаленной машины.
К сожалению, 'портативный' обычно более сильное требование, чем 'совместимый POSIX' для сценариев оболочки. Таким образом, запись чего-то, что работает на любой оболочке POSIX, не слишком трудна, но то, чтобы заставлять ее работать на любой реальной оболочке более трудно.
Можно запустить путем установки каждой оболочки в диспетчере пакетов, в особенности debian's posh
походит на то, что Вы хотите (совместимая политикой Обычная Оболочка). Политикой Debian является POSIX за немногим исключением (echo -n
указанный, local
...).
Кроме того, хотя, тестирование должно покрыть несколько оболочек (/bin/sh особенно) на диапазоне платформ. Я тестирую на Солярисе (/bin/sh и xpg4/sh), и BSD. AIX и HP-UX очень совместимы и не вызывают проблемы. удар является небольшим собственным миром.
Я рекомендовал бы руководству Autoconf по портативной оболочке, которая является абсолютно блестящей и экономит много времени. Большие блоки его являются устаревшими, но это в порядке; просто пропустите TruUnix и Ultrix и так далее, если Вы не заботитесь!
Bash будет работать в совместимом POSIX режиме если POSIXLY_CORRECT
переменная среды установлена. Из страницы справочника:
POSIXLY_CORRECT
If this variable is in the environment when bash starts, the
shell enters posix mode before reading the startup files, as if
the --posix invocation option had been supplied. If it is set
while the shell is running, bash enables posix mode, as if the
command set -o posix had been executed.
Много других утилит GNU будут также соблюдать POSIXLY_CORRECT
, таким образом, если Вы находитесь в системе с преимущественно инструментами GNU (например, большинство систем Linux), это - хорошее начало, если Вашей целью является соответствие POSIX.
[[
.
– jordanm
22.09.2012, 02:59
Вы можете использовать ShellCheck (GitHub) в качестве линтера для ваших сценариев оболочки. Также существует онлайн-версия .
Чтобы обнаружить проблемы совместимости с POSIX (например, SC2039 ), строка shebang вашего сценария оболочки должна иметь вид #! / Bin / sh
. Вы также можете передать - shell = sh
в shellcheck
.
Пример ( test.sh
):
#!/bin/sh
if [[ $HOSTNAME == test ]]; then
echo fail &> foo
fi
Результат ( shellcheck test.sh
):
In test.sh line 2:
if [[ $HOSTNAME == test ]]; then
^-- SC2039: In POSIX sh, [[ ]] is undefined.
^-- SC2039: In POSIX sh, HOSTNAME is undefined.
In test.sh line 3:
echo fail &> foo
^-- SC2039: In POSIX sh, &> is undefined.
posh
действительно походит на то, что я прошу. Я сделаю некоторые тесты, как только я могу. – rahmu 21.09.2012, 16:29