Как определить активное/пассивное завершение TCP-соединения

Если вы просто хотите заменить первое вхождение .comна .org, все, что вам нужно, это поведение по умолчанию оператора sed s///. Только не используйте флаг g:

$ sed 's/.com/.org/' file 
foobar@example.org foo@example.com,bar@example.com

Если вы действительно хотите внести изменения только в первое поле, определенное запятой -, чтобы, если первое .comпоявилось в другом месте строки, оно осталось неизменным, вы можете сделать что-то вроде:

$ perl -pe 's/^(\S+)\.com/$1.org/' file 
foobar@example.org foo@example.com,bar@example.com

Или, что безопаснее, если comвстречается как подстрока (, например.foo.common.net):

$ perl -pe 's/^(\S+)\.com\b/$1.org/' file 
foobar@example.org foo@example.com,bar@example.com

Альтернативно, в GNU sed:

$ sed -E 's/^(\S+)\.com\b/\1.org/' file 
foobar@example.org foo@example.com,bar@example.com

Или, переносимо (, предполагая, что первое поле определяется первым пробелом , а не табуляцией или другим пробелом):

$ sed -E 's/^([^ ])\.com /\1.org /' file 
foobar@example.org foo@example.com,bar@example.com
0
25.05.2020, 06:44
1 ответ

Если вы обнаружите несколько подключений с использованием одной и той же комбинации локального IP-адреса и локального порта, значит, эта система была пассивной конечной точкой при формировании этих подключений. Когда для исходящего соединения используется комбинация локальный порт + локальный IP-адрес, ни один другой процесс обычно не может использовать тот же локальный порт с тем же локальным IP-адресом для чего-либо еще.

После установления соединение TCP должно быть полностью симметричным, поэтому может не быть атрибута, связанного только с самим соединением, который мог бы указать, было ли соединение установлено во входящем или исходящем направлении :, если вы обнаружите прослушивающий сокет или другие соединения, использующие ту же пару локальных IP+портов, вы можете быть уверены, что все эти соединения являются входящими.

Но если вы видите только одно соединение и нет соответствующего прослушивающего сокета, вы не можете быть уверены. Возможно, это исходящее соединение или, возможно, это последнее оставшееся входящее соединение со службой, которая в настоящее время находится в процессе закрытия и уже перестала ожидать новых соединений.

Можно применить некоторые эвристики, основанные на номерах портов. :Если локальный номер порта находится в диапазоне, указанном в /proc/sys/net/ipv4/ip_local_port_range, существует высокая вероятность того, что это исходящее соединение; или если он меньше 1024, это, вероятно, входящий, если вы не используете устаревшую службу, которая требует исходящего подключения к ней, должно исходить из корневого -единственного порта (. Я думаю, что некоторые службы NIS или что-то подобное имеют /было это требование ).

1
18.03.2021, 23:33

Теги

Похожие вопросы