游戏计算获胜概率_伟大的命令行挑战赛的获胜者宣布
游戏计算获胜概率 我们的第一个命令行挑战赛非常受欢迎,吸引了来自世界各地的80多个参赛作品。注意:由于竞赛的条款和条件 ,一些开源爱好者不符合赢得T恤的资格,因为他们居住在某些国家或提交了多个解决方案(只能考虑参赛者的第一个解决方案)。 但不要害怕,我仍然能够在本文中使其中一些人得到认可。挑战命令行挑战大赛的目的是创建一个命令行程序,以计算来自每个IP地址尝试使用SSH访问我的...
游戏计算获胜概率
我们的第一个命令行挑战赛非常受欢迎,吸引了来自世界各地的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通过使用tee和xargs命令提交了一个有趣且富有创意的条目。 它也是唯一的,因为除了使用管道之外,它还使用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
游戏计算获胜概率
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)