博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
IRC僵尸网络日记(一)
阅读量:7227 次
发布时间:2019-06-29

本文共 2077 字,大约阅读时间需要 6 分钟。

知道了原理以后,就可以着手来写了。

服务器暂时用现有的程序,只需要自己写客户端即可。打算用python来写。

需要涉及的技术:

(1)python的socket模块

(2)IRC命令(用send发送)

刚开始就遇到了问题:可以连接到服务器上,但是无法加入频道中。不就应该是send('join #ircchannel \r\n')吗?

后来发现,这句以后服务器会发来ping命令,你必须回答一个pong,才可以连接到频道中。(后来的后来才发现,只是USER被服务器接收的太慢了,只用sleep一下,再JOIN,就可以加入频道了)

import socketimport timenetwork = 'irc.insert.a.network.here' port = 6667 irc = socket.socket ( socket.AF_INET, socket.SOCK_STREAM ) irc.connect ( ( network, port ) ) irc.send ( 'NICK PyIRC\r\n' ) irc.send ( 'USER PyIRC PyIRCPyIRC :Python IRC\r\n' ) time.sleep(1) irc.send ( 'JOIN #pyirc\r\n' ) time.sleep(1) irc.send ( 'PRIVMSG #pyirc:Can you hear me?\r\n' ) time.sleep(1) irc.send ( 'PART #pyirc\r\n' ) irc.send ( 'QUIT\r\n' ) irc.close()

 

只不过ping的有点慢,但还是可以通信的。

不过,这个代码也太丑了,简单粗暴,就不能美化一下吗?

做了一点改变,总比原来的好,最讨厌给类和函数起名字了……

这个程序增加了一个功能,接收其他用户发来的消息。

import socketclass IRCControl(object):    def __init__(self,nickname,network,port,channel):        self.nickname=nickname        self.network=network        self.port=port        self.channel=channel    def interact(self):        irc = socket.socket( socket.AF_INET, socket.SOCK_STREAM )        irc.connect((self.network,self.port))        irc.send('nick  %s\r\n '%self.nickname)        irc.send ( 'USER %s %s %s : %s \r\n'% (self.nickname,self.network,self.network,self.nickname))        while True:            data = irc.recv ( 4096 )            print data            if data.find ( 'PING' ) != -1:                irc.send ( 'PONG ' + data.split() [ 1 ] + '\r\n' )                irc.send ( 'JOIN %s\r\n'%self.channel)                irc.send('privmsg %s : canyouhearme\r\n'%self.channel)            elif data.find ( 'PRIVMSG' ) != -1:                nick = data.split ( '!' ) [ 0 ].replace ( ':', '' )                message = ':'.join ( data.split ( ':' ) [ 2: ] )                print nick + ':', messagedef main():    nickname='lily'    network = '172.30.41.104'    port = 6667    channel='#abs'    control=IRCControl(nickname,network,port,channel)    control.interact()    if __name__=='__main__':    main()

 

转载于:https://www.cnblogs.com/myblog-lyc/p/4180522.html

你可能感兴趣的文章
eclipse查看jar包中class的中文注释乱码问题的解决
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
mariadb安装
查看>>
vue+vuex+axios+echarts画一个动态更新的中国地图
查看>>
5.8 volumetric post-processing--game programming gems5 笔记
查看>>
8086的地址空间
查看>>
Android开发动画效果被遮掉的解决方法
查看>>
Apache2.2.17源码编译安装以及配置虚拟主机
查看>>
2017年开发语言排名
查看>>
读二进制表的显示 Binary Watch
查看>>
我的友情链接
查看>>
linux基础:10、基础命令(4)
查看>>
linux中强大的screen命令
查看>>
放开那个程序员
查看>>
构建高性能数据库缓存之Redis(一)
查看>>
测试驱动开发
查看>>
解决MySQL不允许从远程访问
查看>>
puppet介绍及基于httpd实例部署
查看>>
UML常用工具之三--RSA
查看>>