【问题标题】:How do you parse the SRV record's port from a dig result?如何从挖掘结果中解析 SRV 记录的端口?
【发布时间】:2016-12-12 13:38:21
【问题描述】:

我正在解析这样的 dig 输出以获取 SRV 记录的端口。

export SERVER_DNS_NAME=myserver
echo "SERVER_DNS_NAME: " $SERVER_DNS_NAME
echo "dig: " $(dig +noall +answer $SERVER_DNS_NAME SRV )
echo "port old: " $(dig +noall +answer $SERVER_DNS_NAME SRV | cut -d ' ' -f 6)
SERVER_DIG_RESULT=$(dig +noall +answer $SERVER_DNS_NAME SRV )
echo "SERVER_DIG_RESULT: " $SERVER_DIG_RESULT
SERVER_STRING_ARRAY=($SERVER_DIG_RESULT)
for i in "${SERVER_STRING_ARRAY[@]}"
do
  :
  echo $i
done
SERVER_PORT=${SERVER_STRING_ARRAY[6]}
echo "server port new: " $SERVER_PORT
if [ -z $SERVER_PORT ]; then
  echo "invalid port"
  exit 1
fi
until nc -z $SERVER_DNS_NAME $SERVER_PORT
... do something

我的问题是,有时端口位于数组项 6,有时是 7。

我的问题是:如何从挖掘结果中可靠地解析端口?

【问题讨论】:

  • 您能否举例说明端口位于数组第 6 项和第 7 项的情况?

标签: bash dns port dig


【解决方案1】:

dig 使用+short 选项,这将为您提供最简短的输出,然后对其进行简单解析:

% dig +short _xmpp-client._tcp.jabber.org. SRV
31 30 5222 hermes2v6.jabber.org.
30 30 5222 hermes2.jabber.org.

【讨论】:

    【解决方案2】:

    你可能也喜欢这个:

    host -t SRV mySRVdomain.local                                           
    # mySRVdomain.local has SRV record 1 1 2368 e04dc24b-96c6-4b52-8356-42be0d34e7bb.mySRVdomain.local.
    
    
    # get it as host:port
    host -t SRV mySRVdomain.local | sed -r 's/.+ ([^ ]+) ([^ ]+)\.$/\2:\1/g'
    
    # This will print: e04dc24b-96c6-4b52-8356-42be0d34e7bb.mySRVdomain.local:2368
    # which is the first real URL with PORT
    

    它可能与你需要的不完全相同,但你可以得到这个想法

    【讨论】:

      【解决方案3】:

      使用 Curl 和 AWK 组成快速命令:

      curl http://$(dig +short {HOST} srv | awk '{printf "%s:%s\n",$4,$3}')

      【讨论】:

        猜你喜欢
        • 2010-11-14
        • 1970-01-01
        • 1970-01-01
        • 2014-04-25
        • 2023-03-10
        • 1970-01-01
        • 2014-09-06
        • 2021-03-22
        • 1970-01-01
        相关资源
        最近更新 更多