我很好奇是否有一种简单的方法可以将 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/
路由现在是一个字符串数组,包含来自 whois
的route
值。
最后,您似乎也可以使用此宝石执行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