IRC僵尸网络日记(一)
2014-12-23 18:51
232 查看
知道了原理以后,就可以着手来写了。
服务器暂时用现有的程序,只需要自己写客户端即可。打算用python来写。
需要涉及的技术:
(1)python的socket模块
(2)IRC命令(用send发送)
刚开始就遇到了问题:可以连接到服务器上,但是无法加入频道中。不就应该是send('join #ircchannel \r\n')吗?
后来发现,这句以后服务器会发来ping命令,你必须回答一个pong,才可以连接到频道中。(后来的后来才发现,只是USER被服务器接收的太慢了,只用sleep一下,再JOIN,就可以加入频道了)
只不过ping的有点慢,但还是可以通信的。
不过,这个代码也太丑了,简单粗暴,就不能美化一下吗?
做了一点改变,总比原来的好,最讨厌给类和函数起名字了……
这个程序增加了一个功能,接收其他用户发来的消息。
服务器暂时用现有的程序,只需要自己写客户端即可。打算用python来写。
需要涉及的技术:
(1)python的socket模块
(2)IRC命令(用send发送)
刚开始就遇到了问题:可以连接到服务器上,但是无法加入频道中。不就应该是send('join #ircchannel \r\n')吗?
后来发现,这句以后服务器会发来ping命令,你必须回答一个pong,才可以连接到频道中。(后来的后来才发现,只是USER被服务器接收的太慢了,只用sleep一下,再JOIN,就可以加入频道了)
import socket import time network = '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 socket class 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 + ':', message def main(): nickname='lily' network = '172.30.41.104' port = 6667 channel='#abs' control=IRCControl(nickname,network,port,channel) control.interact() if __name__=='__main__': main()
相关文章推荐
- IRC僵尸网络原理
- 韩国政府网络受“僵尸”围攻,防治Bot网络需多方合作
- 因特网在线聊天协议(IRCP/IRC)--网络大典
- 微软出拳重击“僵尸“网络
- 僵尸网络产生的垃圾邮件占全球的40%
- 美卫星陷漏洞危机 新僵尸网络发威
- 扩充僵尸网络至企业内网核心区
- 网络工程师成长日记320-西安奥林巴斯项目回忆录
- AgoBot 僵尸网络研究笔记(七)
- AgoBot 僵尸网络研究笔记(八)
- 4月第2周安全回顾 微软发布4月补丁 新僵尸网络出现
- AgoBot 僵尸网络研究笔记(十一)
- 【学习日记】吴恩达深度学习工程师微专业第一课:神经网络和深度学习
- 从僵尸网络追踪到入侵检测 第10章 Iptables 安装与配置
- c#初学日记:多线程扫描网络计算机
- 黑马程序员_学习日记十二_网络编程
- 浅析防御僵尸网络基于应用层的DDOS攻击
- 黑马程序员--Java学习日记之网络编程
- 今天注册了blog帐号,开始了我的第一篇网络日记, 心情是 :浮尘聚散变化又再,但是总可卷土重来!