Bash to Ruby - 使用 whois 和 grep 命令获取列表



我很好奇是否有一种简单的方法可以将 bash 命令转换为 ruby 脚本。

如果在命令行中键入此内容,您将获得 IP 网络列表。

whois -h whois.radb.net -- '-i origin AS35995' | grep -Eo "([0-9.]+){4}/[0-9]+"

有没有一种简单的方法可以在 Ruby 中做类似的事情,或者我必须手动编码?

很抱歉菜鸟问题,提前感谢任何帮助!

您可以保持命令不变并使用@AndreyDeineko的有效解决方案。

你可以在 Ruby 中执行 grep 命令,String#scan

abc   = 'AS35995'
whois = `whois -h whois.radb.net -- '-i origin #{abc}'`
# route:      8.25.194.0/23
# descr:      Twitter
# origin:     AS35995
# admin-c:    NETWO3685-ARIN
# tech-c:     NETWO3685-ARIN
# notify:     noc@twitter.com
# mnt-by:     MAINT-AS13414
# changed:    ck@twitter.com 20121028  #17:03:09Z
# source:     RADB
# route:      8.25.196.0/23
# descr:      Twitter
# origin:     AS35995
# ....
p routes = whois.scan(/[d.]{7,}/d+/)
#=> ["8.25.194.0/23", "8.25.196.0/23", "192.133.78.0/23", "8.25.194.0/24", "8.25.195.0/24", "8.25.196.0/24", "8.25.197.0/24", "185.45.4.0/24", "103.252.112.0/23", "185.45.4.0/23"]

这个正则表达式很简单,但可能匹配太多。从这个链接来看,看起来更准确的正则表达式是:

/b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)/d+b/

路由现在是一个字符串数组,包含来自 whoisroute值。

最后,您似乎也可以使用此宝石执行whois

好吧,你有很多选择。

这是一个反引号选项(用反引号将任何 bash 命令括起来):

puts `whois -h whois.radb.net -- '-i origin AS35995' | grep -Eo "([0-9.]+){4}/[0-9]+"`
# 8.25.194.0/23
# 8.25.196.0/23
# 192.133.78.0/23
# 8.25.194.0/24
# 8.25.195.0/24
# 8.25.196.0/24
# 8.25.197.0/24
# 185.45.4.0/24
# 103.252.112.0/23
# 185.45.4.0/23

system选项:

system("whois -h whois.radb.net -- '-i origin AS35995' | grep -Eo '([0-9.]+){4}/[0-9]+'")
# 8.25.194.0/23
# 8.25.196.0/23
# 192.133.78.0/23
# 8.25.194.0/24
# 8.25.195.0/24
# 8.25.196.0/24
# 8.25.197.0/24
# 185.45.4.0/24
# 103.252.112.0/23
# 185.45.4.0/23

最新更新