首页 文章 精选 留言 我的

精选列表

搜索[脚本自愈],共10000篇文章
优秀的个人博客,低调大师

linux bash Shell脚本经典 Fork炸弹演示及命令详解

Jaromil 在 2002 年设计了最为精简的一个Linux Fork炸弹,整个代码只有13个字符,在 shell 中运行后几秒后系统就会宕机: :(){:|:&};: 这样看起来不是很好理解,我们可以更改下格式: :() { :|:& }; : 更好理解一点的话就是这样: bomb() { bomb|bomb& }; bomb 因为shell中函数可以省略function关键字,所以上面的十三个字符是功能是定义一个函数与调用这个函数,函数的名称为:,主要的核心代码是:|:&,可以看出这是一个函数本身的递归调用,通过&实现在后台开启新进程运行,通过管道实现进程呈几何形式增长,最后再通过:来调用函数引爆炸弹。因此,几秒钟系统就会因为处理不过来太多的进程而死机,解决的唯一办法就是重启。 Bomb一下 秉着不作不死的心态,我们也来运行一下,于是我将矛头指向云主机,,我使用了国内的一个2G内存的云主机,首先在本地开启两个终端,在一个终端连接云主机后运行炸弹,秒后再尝试用另外一个终端登录,效果可以看下面Gif图: 看,运行一段时间后直接报出了-bash: fork: Cannot allocate memory,说明内存不足了。并且我在二号终端上尝试连接也没有任何反应。因为是虚拟的云主机,所以我只能通过主机服务商的后台来给主机断电重启。然后才能重新登录: 炸弹危害 Fork炸弹带来的后果就是耗尽服务器资源,使服务器不能正常的对外提供服务,也就是常说的DoS(Denial of Service)。与传统1v1、通过不断向服务器发送请求造成服务器崩溃不同,Fork炸弹有种坐山观虎斗,不费一兵一卒斩敌人于马下的感觉。更吓人的是这个函数是不需要root权限就可以运行的。看到网上有帖子说某些人将个性签名改为Fork炸弹,结果果真有好奇之人中枪,试想如果中枪的人是在公司服务器上运行的话,oh,! 预防方式 当然,Fork炸弹没有那么可怕,用其它语言也可以分分钟写出来一个,例如,python版: import os while True: os.fork() Fork炸弹的本质无非就是靠创建进程来抢占系统资源,在Linux中,我们可以通过ulimit命令来限制用户的某些行为,运行ulimit -a可以查看我们能做哪些限制: ubuntu@10-10-57-151:~$ ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 7782 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited open files (-n) 1024 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 8192 cpu time (seconds, -t) unlimited max user processes (-u) 7782 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited 可以看到,-u参数可以限制用户创建进程数,因此,我们可以使用ulimit -u 20来允许用户最多创建20个进程。这样就可以预防bomb炸弹。但这样是不彻底的,关闭终端后这个命令就失效了。我们可以通过修改/etc/security/limits.conf文件来进行更深层次的预防,在文件里添加如下一行(ubuntu需更换为你的用户名): ubuntu - nproc 20 这样,退出后重新登录,就会发现最大进程数已经更改为20了, 这个时候我们再次运行炸弹就不会报内存不足了,而是提示-bash: fork: retry: No child processes,说明Linux限制了炸弹创建进程。 参考 http://en.wikipedia.org/wiki/Fork_bomb 您可以考虑给博主来个小小的打赏以资鼓励,您的肯定将是我最大的动力。thx. 微信打赏 支付宝打赏 作 者: Angel_Kitty 出 处:http://www.cnblogs.com/ECJTUACM-873284962/ 关于作者:潜心机器学习以及信息安全的综合研究。如有问题或建议,请多多赐教! 版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。 特此声明:所有评论和私信都会在第一时间回复。也欢迎园子的大大们指正错误,共同进步。或者直接私信我 声援博主:如果您觉得文章对您有帮助,可以点击右下角【推荐】推荐一下该博文。您的鼓励是作者坚持原创和持续写作的最大动力!

优秀的个人博客,低调大师

Python python-nmap多线程端口扫描脚本(转载)

版权声明:本文为博主原创文章,未经博主允许不得转载。 我就看了几天的python。这个作为练习,若有错误,望指出。 就是基于socket,每个端口去连一下能返回信息就是开启的。一想这么的没必要。 可以去连接,异常出错就是没有开启。 s=socket.socket() s.connect((ip,port)) 但是有的连接要很长时间,那么设置时间: s.settimeout(0.1) 只是ip,没有域名很没意思那么来个域名解析成ip: socket.gethostbyname(Domain) 先不考虑多线程: import socket def getip(Domain): try: return socket.gethostbyname(Domain) except socket.error,e: print '%s: %s'%(Domain,e) return 0 def scan(ip): list1=list() list2=range(1,65535) for port in list2: try: s=socket.socket() s.settimeout(0.1) s.connect((ip,port)) str1= "[+] Port:"+str(port) +" open " print str1 list1.append(port) s.close() except:pass print list1 def main(): print '.........' print 'please input Domain/ip' Domain = raw_input("input:") ip = getip(Domain) print 'ip:'+ip scan(ip) if __name__=='__main__': main() 这里写图片描述 不用线程,一个一个去连接,因为是阻塞的,真的真的是异常的慢。。。 上网查了下别人是怎么写的: import socket import threading from Queue import Queue def scan(port): s = socket.socket() s.settimeout(0.1) if s.connect_ex(('localhost', port)) == 0: print port, 'open' s.close() def worker(): while not q.empty(): port = q.get() try: scan(port) finally: q.task_done() if __name__ == '__main__': q = Queue() map(q.put,xrange(1,65535)) threads = [threading.Thread(target=worker) for i in xrange(100)] map(lambda x:x.start(),threads) q.join() 代码转自:http://www.jb51.net/article/86615.htm 还有个很好的: # -*- coding: utf-8 -*- __author__ = 'Phtih0n' import threading, socket, sys, cmd, os, Queue #扫描常用端口 PortList = [21, 22, 23, 25, 80, 135, 137, 139, 445, 1433, 1502, 3306, 3389, 8080, 9015] #得到一个队列 def GetQueue(list): PortQueue = Queue.Queue(65535) for p in list: PortQueue.put(p) return PortQueue #单IP扫描线程个数 nThread = 20 #线程锁 lock = threading.Lock() #超时时间 Timeout = 3.0 #打开的端口列表 OpenPort = [] class ScanThread(threading.Thread): def __init__(self, scanIP): threading.Thread.__init__(self) self.IP = scanIP def Ping(self, Port): global OpenPort, lock, Timeout sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(Timeout) address = (self.IP, Port) try: sock.connect(address) except: sock.close() return False sock.close() OpenPort.append(Port) if lock.acquire(): print "IP:%s Port:%d" % (self.IP, Port) lock.release() return True class ScanThreadSingle(ScanThread): def __init__(self, scanIP, SingleQueue): ScanThread.__init__(self, scanIP) self.SingleQueue = SingleQueue def run(self): while not self.SingleQueue.empty(): p = self.SingleQueue.get() self.Ping(p) class ScanThreadMulti(ScanThread): def __init__(self, scanIP, PortList): ScanThread.__init__(self, scanIP) self.List = PortList[:] def run(self): for p in self.List: self.Ping(p) class Shell(cmd.Cmd): u'''Py Port Scanner 0.1 使用说明: port [port..] 设置扫描的端口,用逗号分隔。 默认:21, 22, 23, 25, 80, 135, 137, 139, 445, 1433, 1502, 3306, 3389, 8080, 9015 example:port 21,23,25 example: port 1000..2000 example: port 80,443,1000..1500 scan [IP] 扫描某一IP地址 example: scan 192.168.1.5 search [IP begin]-[IP end] 扫描某一IP段 example: search 192.168.1.1-192.168.1.100 time [timeout] 设置超时时间,默认为3秒 example: time 5 cls 清楚屏幕内容 listport 打印端口列表 help 打开本帮助 ''' def __init__(self): cmd.Cmd.__init__(self) reload(sys) sys.setdefaultencoding('utf-8') self.prompt = "Port Scan >>" self.intro = "Py Port Scanner 0.1" def do_EOF(self, line): return True def do_help(self, line): print self.__doc__ #设置端口 def do_port(self, line): global PortList PortList = [] ListTmp = line.split(',') for port in ListTmp: if port.find("..") < 0: if not port.isdigit(): print "输入错误" return False PortList.append(int(port)) else: RangeLst = port.split("..") if not (RangeLst[0].isdigit() and RangeLst[1].isdigit()): raise ValueError exit() for i in range(int(RangeLst[0]), int(RangeLst[1])): PortList.append(i) def do_scan(self, line): global nThread, PortList ThreadList = [] strIP = line SingleQueue = GetQueue(PortList) for i in range(0, nThread): t = ScanThreadSingle(strIP, SingleQueue) ThreadList.append(t) for t in ThreadList: t.start() for t in ThreadList: t.join() def do_search(self, line): global nThread, PortList ThreadList = [] (BeginIP, EndIP) = line.split("-") try: socket.inet_aton(BeginIP) socket.inet_aton(EndIP) except: print "输入错误" return IPRange = BeginIP[0:BeginIP.rfind('.')] begin = BeginIP[BeginIP.rfind('.') + 1:] end = EndIP[EndIP.rfind('.') + 1:] for i in range(int(begin), int(end)): strIP = "%s.%s" % (IPRange, i) t = ScanThreadMulti(strIP, PortList) ThreadList.append(t) for t in ThreadList: t.start() for t in ThreadList: t.join() def do_listport(self, line): global PortList for p in PortList: print p, print '\n' def do_time(self, line): global Timeout try: Timeout = float(line) except: print u"参数错误" def do_cls(self, line): os.system("cls") if '__main__' == __name__: try: os.system("cls") shell = Shell() shell.cmdloop() except: exit() 转自:http://www.jb51.net/article/60165.htm 要学的还有很多。先练习下。先从模仿别人学起。

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册