Управляйте исходным адресом для запросов whois

Почему псевдоним не работает

alias wd='ps -ef | grep java | awk {'print $2 " " $9'} | egrep "(A|B|C|D)"'

alias команда получает три аргумента. Первой является строка wd=ps -ef | grep java | awk {print (одинарные кавычки предотвращают символы между ними от наличия особого значения). Второй аргумент состоит из символа одиночного пробела. (В .bashrc, позиционные параметры $2 и $9 пусты, таким образом, $2 расширяется до списка 0 слов.) Третий аргумент } | egrep "(A|B|C|D)" (снова одинарные кавычки защищают специальные символы).

Определение псевдонима анализируется как любая другая команда оболочки, когда с этим встречаются. Затем строка, определенная для псевдонима, анализируется, когда псевдоним расширен. Вот некоторые возможные способы определить этот псевдоним. Первая возможность: так как целое определение псевдонима в одинарных кавычках, только используйте двойные кавычки в командах, что означает, что необходимо защитить " и $ предназначенный для awk с обратными косыми чертами.

alias wd='ps -ef | grep java | awk "{print \$2 \" \" \$9}" | egrep "(A|B|C|D)"'

Вторая возможность: каждый символ обозначает себя в одинарных кавычках, за исключением того, что одинарная кавычка заканчивает литеральную строку. '\'' идиома для “одинарной кавычки в единственно заключенной в кавычки строке”: закончите единственно заключенную в кавычки строку, поместите литеральную одинарную кавычку и сразу запустите новую единственно заключенную в кавычки строку. С тех пор нет никакого прошедшего пространства, это - все еще то же слово.

alias wd='ps -ef | grep java | awk '\''{print $2 " " $9}'\'' | egrep "(A|B|C|D)"'

Можно упростить это немного:

alias wd='ps -ef | grep java | awk '\''{print $2, $9}'\'' | egrep "(A|B|C|D)"'

Подсказка: использовать set -x видеть, как оболочка разворачивает Ваши команды.

Почему функция не работает

Я не знаю. Часть Вы показываете взгляды хорошо. Если Вы все еще не понимаете, почему Ваша функция не работает после моих объяснений, вставки копии Ваш код.

Псевдоним или функция?

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

alias grep='grep --color'
alias cp='cp -i'
alias j=jobs

Для чего-либо более сложного используйте функции.

Что необходимо было записать

Вместо того, чтобы анализировать ps вывод, заставьте его генерировать вывод, который подходит Вам.

wd () {
  ps -C java -o pid=,cmd= | egrep "(A|B|C|D)"
}
4
15.06.2012, 16:53
1 ответ

Извинения за недоразумение вопроса в первый раз... необходимо использовать iptables к SNAT к исходному адресу к Вашему адресу SSL. Я добавляю другой интерфейсный адрес (172.16.61.5/29) ниже на eth0 для моделирования той же динамики...

При определении источника IPv4 whois запрашивает от 172.16.61.5

Прежде (Сниффинг запроса whois -h whois.arin.net <address>):

[mpenning@Bucksnort ~]$ sudo tshark -i eth0 tcp and port 43
Running as user "root" and group "root". This could be dangerous.
Capturing on eth0
  0.000000 172.16.61.6 -> 199.71.0.49  TCP 55089 > nicname [SYN] Seq=0 Win=5840 Len=0

Обратите внимание, что мой исходный адрес 172.16.61.6...

Установите мой исходный адрес для всего трафика TCP к tcp/43:

# Send all IPv4 whois queries from 172.16.61.5
sudo ip addr add 172.16.61.5/29 dev eth0
sudo iptables -t nat -A POSTROUTING -o eth0 -p TCP --dport 43 -j SNAT --to-source 172.16.61.5
sudo iptables -t nat -vnL

После (Сниффинг запроса whois -h whois.arin.net <address>):

Теперь мой адрес 172.16.61.5...

[mpenning@Bucksnort ~]$ sudo tshark -i eth0 tcp and port 43
Running as user "root" and group "root". This could be dangerous.
Capturing on eth0
  0.000000 172.16.61.5 -> 199.71.0.49  TCP 55091 > nicname [SYN] Seq=0 Win=5840 Len=0

Удалить правило из таблицы...

# Remove the rule... (assuming it is the first nat POSTROUTING rule...)
sudo iptables -D POSTROUTING 1 -t nat

При определении источника IPv6 whois запрашивает от 2607:fcff:1001:100:202:55ff:dead:beef

Опция IPv6 требует, чтобы ядро с NAT66... видело замечания по установке HE.net NAT66 и Packetpushers: Слава Богу для NAT66

# IF you have an SNAT66 kernel...
#     Send all IPv6 whois queries from 2607:fcff:1001:100:202:55ff:dead:beef
sudo ip -6 addr add 2607:fcff:1001:100:202:55ff:dead:beef/64 dev eth0
sudo ip6tables -t nat66 -A POSTROUTING -o eth0 -p TCP --dport 43 -j SNAT66 --to-source 2607:fcff:1001:100:202:55ff:dead:beef
sudo ip6tables -t nat66 -vnL
# Remove the rule... (assuming it is the first nat POSTROUTING rule...)
sudo ip6tables -D POSTROUTING 1 -t nat66

У меня нет времени для подтверждений NAT66 часть прямо сейчас... мое исследование указывает, что синтаксис выше правилен хотя

2
27.01.2020, 21:00
  • 1
    я верю OP, хочет отправить запросу определенный интерфейсный адрес, не запросить определенный хост. –  George M 07.06.2012, 16:47
  • 2
    Для использования правила nat66 необходимо удостовериться, что whois сервер решает к адресу ipv6..., который является проблемой DNS, не iptables проблемой. Одно легкое обходное решение должно поместить статическое отображение в/etc/hosts –  Mike Pennington 15.06.2012, 15:48
  • 3
    за Вашу справку, я получил его теперь работа :-)! –  heuri 15.06.2012, 17:03

Теги

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