TCP客户端与服务器

标签: none

心血来潮,突然想做一个自己的学习记录,还请路过的师傅们多多指点!
参考书籍《python黑帽子》

环境准备:
kali-linux-1.0.9虚拟机,由于kali官方不再给予老版本kali的更新,我使用的是kali2016.1虚拟机。
镜像下载:http://cdimage.kali.org/kali-images/

执行 python --version 检查你的python版本是否为Python2.7版本。

安装Python管理工具:esay_install和pip。
root@kali:~#: apt-get install python-setuptools python-pip

在软件包安装,完成后,我们迅速测试一下,安装之后制作的基于GitHub的木马所需要的模块。
root@kali:~#: pip install github3.py

测试Python环境,查看函数库是否正确安装。
root@kali:~#: python
Python 2.7.12+ (default, Sep  1 2016, 20:27:38)
[GCC 6.2.0 20160927] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import github3
>>>exit()

如果输出情况和上面代码不一致,则说明你的配置存在错误。

关于之后要用到的Socket模块的学习:
https://docs.python.org/2/library/socket.html
http://python.usyiyi.cn/translate/python_278/library/socket.html(中文版)

TCP客户端:
#!/usr/bin/env python
#-- coding:utf-8 --
import socket

target_host = "0.0.0.0"
target_port = 9999

#建立一个socket对象(AF_INET:使用标准IPV4地址或主机名,  SOCK_STREAM:TCP客户端)
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

#连接客户端
client.connect((target_host,target_port))

#发送TCP数据
client.send("GET / HTTP/1.1\r\nHost:baidu.com\r\n\r\n")

#接收数据(4096个字符)
response = client.recv(4096)

print response

在以上代码中对套接字做了一定的假设:
1.假设连接总是能成功建立,不会出错或异常;
2.假设服务器总是期望客户端能首先发送数据(与之相反的是的服务器首先向你发送数据并等待你的相应);
3.假设是服务器每次都能及时返回数据。

TCP服务器:
#!/usr/bin/env pyhton
#-- coding:utf-8 --
import socket
import threading

#绑定服务器需要监听IP地址和端口
bind_ip = "0.0.0.0"
bind_port = 9999

server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

#启动监听
server.bind((bind_ip,bind_port))

#设置最大连接数为5
server.listen(5)

print "[*] Listening on %s:%d" % (bind_ip,bind_port)

#这是客户处理线程(执行recv()函数将一段信息发送给客户端)
def handle_client(client_socket):

    #打印出客户端发送得到内容
    request = client_socket.recv(1024)

    print "[*] Received: %s" % request

    #返还一个数据包
    client_socket.send("ACK!")

    client_socket.close()

while True:

    client,addr = server.accept()

    print "[*] Accepted connection from:%s:%d" % (addr[0],addr[1])

    #挂起客户端线程,处理传入的数据
    client_handler = threading.Thread(target=handle_client,args=(client,))
    client_handler.start()

测试结果
QQ图片20161113171653.png


添加新评论