游戏计算获胜概率

我们的第一个命令行挑战赛非常受欢迎,吸引了来自世界各地的80多个参赛作品。

注意:由于竞赛的条款和条件 ,一些开源爱好者不符合赢得T恤的资格,因为他们居住在某些国家或提交了多个解决方案(只能考虑参赛者的第一个解决方案)。 但不要害怕,我仍然能够在本文中使其中一些人得到认可。

挑战

命令行挑战大赛的目的是创建一个命令行程序,以计算来自每个IP地址尝试使用SSH访问我的主机的电子邮件数量。 请参阅文章“ 应对 巨大的命令行 挑战”

对于挑战,我有自己的简单解决方案,但它不是赢家。 实际上,许多比赛参赛作品提供的解决方案都比我自己提供的解决方案更好:

grep -i banned admin.index | grep SSH | awk '{print $4}' | sort -n | uniq -c | sort -n

我的解决方案提供了一个列表,该列表按IP地址的升序排列,其中大多数条目位于admin.index文件中。 最后一种并不是赢得比赛的必要条件,但是我想做的就是从发生最多攻击的地方进行观察。 该解决方案产生5377行输出,因此大约等于唯一IP地址的数量。 但是,我的解决方案没有考虑一些没有IP地址的异常条目。 当我在考虑此挑战的目标是什么时,我决定不指定应该生产的行数,因为我觉得这可能太过严格,会对条目造成不必要的限制。 我认为这是个好主意,因为我收到的大多数条目产生的数字有些不同。 因此,一个成功的解决方案不需要产生与我的解决方案相同数量的数据行。

Opensource.com读者提出了许多解决此问题的方法,这让我感到惊讶。 在大多数情况下,即使是相似的条目也存在一些差异。

获奖者

事不宜迟,让我们宣布获胜者!

首次进入解决方案

美国新泽西州汉密尔顿的Michael DiDomenico

迈克尔提交了比赛的第一份参赛作品,这是一个可行的解决方案。 我特别喜欢Michael使用sort命令来确保输出按IP地址排序。 他的录入产生了5,295行输出,与我自己的结果相差无几。 这也是许多其他条目产生的输出行数。

grep "SSH: banned" admin.index | sed 's/","/ /g'| cut -f4 -d" " | grep "^[0-9]" | sort -k1,1n -k2,2 -k3,3n -k4,4n -t. | uniq -c

最短的解决方案

西班牙马德里的VíctorOchoaRodríguez

Victor提交了一个65个字符的解决方案,该解决方案非常优雅,可以很好地使用egrep来选择包含SSH和IP地址的行,而仅打印与表达式匹配的每一行部分。 我从此项中了解了“ o ”选项,因此感谢Víctor提供了一些新知识。 该解决方案以及下面的荣誉介绍产生了5,295行输出。

egrep -o '".F.*H.*\.[0-9]+' admin.index|cut -d\ -f4|sort|uniq -c

最短解决方案荣誉奖

Teresa e Junior提交的条目长度为58个字符; 但是,她没有资格赢得T恤。

grep SSH admin.index|grep -Po '(\d+\.){3}\d+'|sort|uniq -c

最具创意的解决方案

一点背景:前两个类别可以完全根据客观标准来判断,因此该类别的目的是提供一个机会,以识别更具创造性的作品。 因此,此类获奖者是基于我的主观意见。

而且,我们有一条领带! (两人都将收到一件T恤。)

爱尔兰科克郡的Przemo Firszt

Przemo通过使用teexargs命令提交了一个有趣且富有创意的条目。 它也是唯一的,因为除了使用管道之外,它还使用tee命令将中间数据存储在文件中,该命令还将数据传递到STDOUT,最终输出重定向到另一个文件,而不是被允许转到STDOUT。 。 它甚至在最后通过删除临时文件进行清理。 该解决方案产生7,403行输出。 这似乎是因为许多IP地址有多行。 因此,尽管这不是一个完美的解决方案,但只需很少的修改即可为每个IP地址只生成一行输出。

grep SSH admin.index | awk '{print $4}' | grep -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | sed 's/\".*//' | tee ips | xargs -I % sh -c "echo -ne '%\t' ; grep -o % ips | wc -w" | sort | uniq > results ; rm ips

美国德克萨斯州弗里斯科的蒂姆·蔡斯(Tim Chase)

Tim的条目是唯一的,因为它使用curl命令从服务器下载文件,然后使用awk命令选择文件中所需的行,并且仅从每行中选择IP地址。 该解决方案导致5,295行输出。

curl -s http://www.millennium-technology.com/downloads/admin.index |awk -F, '$1~/SSH: banned/{print $1}'|grep -o '[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+'|sort|uniq -c

额外的信贷解决方案

针对竞赛的额外信用选项,有许多条目旨在提供每个IP地址的国家/地区名称。 该类别没有任何奖项,只有Opensource.com上提及的满意度。

有两项特别引起了我的兴趣; 两者都使用GeoIP软件包来提供用于获取国家/地区信息的本地数据库。 其他几个条目也使用了whois命令,但是除其他问题外, whois使用了一个远程数据库,并且当从单个IP地址访问太快时,它会受到阻止。 GeoIP软件包可在标准的Fedora存储库和CentOS的EPEL存储库中获得。

阿根廷 G 的ustavo Yzaguirre

Gustavo提交了一个条目,该条目首先给出一个带计数的IP地址的准系统列表,然后列出国家/地区。 它产生16,419行输出,其中许多是重复的。 古斯塔沃说,它没有经过优化,但这不是要求之一。

awk '/SSH: banned/ && $4 ~ /^[0-9]/ {print $4}' admin.index | sed 's/[^0-9.]*//g' | sort | uniq -c | awk '{printf $1 " " $2 " "; system("geoiplookup "$2)};' | sort -gr | sed 's/ GeoIP Country Edition: / /g'

塞尔维亚贝尔格莱德的Dejan Bogdanovic

Dejan提交了一个有趣的条目,其中列出了IP地址的频率降序以及国家/地区信息。 Dejan的条目产生了5,764行输出。

cat admin.index | egrep -o '([0-9]*\.){3}[0-9]*' | sort -n | uniq -c | sort -nr | awk '{ORS=" "} {print $1} {print $2} {system("geoiplookup " $2 "| cut -d: -f 2 | xargs")}'

结论

感谢所有向“伟大的命令行挑战”提交作品的人。 祝贺我们的优胜者,以及没有获奖但值得一提的人!

看到您对问题的许多解释和解决方案确实很有趣,也很高兴。 另外,一些人提到他们真的很喜欢这场比赛,并希望Opensource.com做更多的事情。 员工和我从举办这种性质的比赛中学到了很多东西,因此我们希望做得更多,并结合“经验教训”。

翻译自: https://opensource.com/life/15/8/winners-announced-great-command-line-challenge

游戏计算获胜概率

游戏计算获胜概率_伟大的命令行挑战赛的获胜者宣布相关推荐

  1. 中使用mysql连接失败_如何在命令行下使用 MySQL 连接数据库不用每次都输入密码?...

    点击上方☝SpringForAll社区 轻松关注! 及时获取有趣有料的技术文章 本文来源:http://rrd.me/g7J9e 我们知道在命令行下可以使用下面的命令连接 MySQL ,其中 xxx ...

  2. 如何使用cmd进入打印机选项_怎样用命令行方式添加打印机端口? (已解决)

    命令行方式添加打印机是比较简单的,现在我的问题是这样的, 有一台网络打印机,用下面附录的方式安装驱动程序是没有问题的, 一个DOS命令就可以搞定,但是需要创建一个TCP/IP 的端口,即不是 用的LP ...

  3. java dos编译命令是什么_在DOS命令行状态下,如果源程序HelloWorld.java在当前目录下,那么编译该程序的命令是()...

    [单选题]下列行为中,属于绝对商行为的是 [填空题]汽车故障的变化规律可分为3个阶段,早期故障期. 和 . [填空题]无分电器点火线圈与一般点火线圈不同,其 与 没有连接,为互感作用. [简答题]练习 ...

  4. php 命令行打印换行符_如何在命令行输出中打印换行符

    php 命令行打印换行符 Surprisingly, getting computers to give humans readable output is no easy feat. With th ...

  5. openstack云计算平台 2(计算服务、Networking 服务、命令行方式启动实例)

    目录 一.组件3-计算服务 1.简介 2.安装并配置控制节点 3.安装并配置计算节点 4.验证操作 二.组件4-Networking 服务 1.简介 2.安装并配置控制节点 3.控制节点配置网络选项- ...

  6. dos命令为java程序赋值_在DOS命令行状态下,如果源程序HelloWorld.java在当前目录下,那么编译该程序的命令是() (5.0分)_学小易找答案...

    [判断题]run方法是运行线程的主体,若run方法运行结束,线程就消亡了 [单选题]在Java 程序中,下面哪个是不合法的标识符() (5.0分) [其它]请提交实验二压缩包 [单选题]在DOS命令行 ...

  7. dos下编写java程序_在DOS命令行状态下,如果命令java Hello成功运行了程序,那么下面哪些叙述是正确的()...

    [判断题]在JDK命令行开发工具中,用编译程序javac.exe编译生成的文件是二进制可执行文件. [论述题]你认为堂吉诃德是一个怎样的人? [简答题]练习函数 [单选题]下列制度体现商法提高交易效率 ...

  8. centos 计算器_在Linux命令行中使用计算器的5个命令详解

    大家好,我是良许. 在使用 Linux 时,我们有时会需要做一些计算,那么我们就可能需要用到计算器.在 Linux 命令行里,有许多计算器工具,这些命令行计算器可以让我们执行科学计算.财务计算或者一些 ...

  9. linux怎么进mysql天气_在Linux 命令行下浏览天气预报

    导读 Q: 我经常在 Linux 桌面查看天气预报.然而,是否有一种在终端环境下,不通过桌面小插件或者浏览器查询天气预报的方法?其中有一个就是wego,一个终端下的小巧程序.使用基于ncurses 的 ...

最新文章

  1. objdump与readelf
  2. C#怎么通过一个按钮Button,实现点击这个按钮可以打开一个文件或者文件夹?
  3. 防雪崩利器:熔断器 Hystrix 的原理与使用--转
  4. Python实训day14pm【Python网络爬虫综合大作业-参考解析】
  5. 前端学习(2791):实现上拉加载更多
  6. Redis实现之对象(三)
  7. karatsuba乘法
  8. spring字符串判空_字符串工具类StringUtils实现字符串是否中文、字符串分割/判空/替换/查找、是否包含乱码及字符串数组合并等常规操作...
  9. apache php日志配置,HTML_初学:apache与php基本配置,1、APACHE的日志主要分为“ - phpStudy...
  10. struts2:JSON在struts中的应用(JSP页面中将对象转换为JSON字符串提交、JSP页面中获取后台Response返回的JSON对象)...
  11. 社交媒体广告看不出来?Instagram加标签让你一目了然
  12. 接入网NFV引入路径:CPE、OLT和BNG或将率先云化
  13. 计算机的数据通信的概念,计算机数据通信基础知识.ppt
  14. 手把手教你如何用 TensorFlow 实现基于 DNN 的文本分类
  15. mac使用开源方案实现读取ntfs
  16. matlab运行很多columns,columns函数的使用方法
  17. Java DataSource对象
  18. html_09网页超链接
  19. C# 中2,10,16进制及其ASCII码之间转化
  20. Intel Technology Journal

热门文章

  1. java文件上传总结
  2. 如何优雅地编写Java
  3. 深度学习(10):自然语言处理(转)
  4. Mysql运维管理-Mysql增量备份及分库分表备份数据恢复实战12
  5. 阶段性总结_学习笔记
  6. 【小窍门】浏览器兼容圆角Border-radius的问题
  7. Linux 磁盘管理--RAID1创建
  8. UIImage 剪裁的方法
  9. 【推荐】 女人愁嫁时代终于来临
  10. stella forum v1.2 的初始设计模型