1.网络,web服务器——Tcp

Tcp客户端

import socket

# ip协议版本     AF_INET     ipv4
# 选择协议       SOCK_STREAM     tcp协议

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


tcp_client_socket.connect(("127.0.0.1", 9090))

# 转二进制
send_data = '123'.encode("utf8")
tcp_client_socket.send(send_data)

recv_data = tcp_client_socket.recv(1024)
recv_msg = recv_data.decode("utf8")
print(recv_msg)

tcp_client_socket.close()

Tcp服务端

import multiprocessing
import socket



def handler_client_request(client_socket):
    while True:
        recv_data = client_socket.recv(1024)
        # 客户端断开链接
        if len(recv_data) == 0:
            print("客户端关闭!!!")
            break;
        recv_mes = recv_data.decode("utf8")
        print("收到信息", recv_mes)
        send_data = "server".encode("utf8")
        client_socket.send(send_data)
    client_socket.close()


def ftp_client():
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 端口复用设置,程序退出,立即释放端口
    # socket.SOL_SOCKET      socket选项列表
    # socket.SO_REUSEADDR    地址复用
    server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
    # 默认本机ip地址
    server_socket.bind(("127.0.0.1", 8080))
    # 最大监听个数
    # 从主动套接字变成被动套接字
    server_socket.listen(128)
    # 和客户端通信的socket,客户端地址信息(ip,端口)
    while True:
        client_socket, address = server_socket.accept()
        print("客户端地址", address, "链接socket", client_socket)
        client_multi = multiprocessing.Process(target=handler_client_request, args=(client_socket,))
        client_multi.daemon = True
        client_multi.start()
    server_socket.close()


if __name__ == '__main__':
    ftp_client()

案例:静态Web服务器

import multiprocessing
import socket
import sys

func_list = {}


# 路由
def route(path):
    def routeOut(func):
        func_list[path] = func

        def routeIn():
            func()

        return routeIn

    return routeOut


@route("/index.html")
def index():
    with open('index.html', encoding="utf8") as f:
        conent = f.read()
    return conent


@route("/main.html")
def index():
    with open('main.html', encoding="utf8") as f:
        conent = f.read()
    return conent


class WebSocket(object):
    def __init__(self, port):
        self.tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

        self.tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)

        self.tcp_server_socket.bind(("127.0.0.1", port))

        self.tcp_server_socket.listen(128)

    @staticmethod
    def handler_client_request(client_socket):
        #  recv_data = client_socket.recv(1024)
        recv_data = client_socket.recv(50 * 1024)
        if len(recv_data) == 0:
            print("客户端关闭")
            return
        path = recv_data.decode("utf8").split(" ")[1]
        print("请求路径", path)
        if path == '/':
            path = '/index.html'
        # 响应行
        response_line = 'HTTP/1.1 200 OK\r\n'
        response_header = 'server:py1.0\r\n'
        # 打开资源文件
        try:
            response_body = func_list[path]()
        except BaseException as error:
            response_line = 'HTTP/1.1 404 NOT FOUND\r\n'
            response_body = "not found"
        finally:
            response_data = (response_line + response_header + "\r\n" + response_body).encode()
            client_socket.send(response_data)
            client_socket.close()
        # try:
        #     f = open(path[1:], "rb")
        #     file_data = f.read()
        #     f.close()
        # except BaseException as error:
        #     print("文件不存在")
        #     response_line = 'HTTP/1.1 404 NOT FOUND\r\n'
        #     response_body = "not found"
        #     response_data = (response_line + response_header + "\r\n" + response_body).encode("utf8")
        #     client_socket.send(response_data)
        # else:
        #     response_body = file_data
        #     response_data = (response_line + response_header + "\r\n").encode() + response_body
        #     client_socket.send(response_data)
        # client_socket.close()
        # response_body = '123'
        # response_data = response_line + response_header + "\r\n" + response_body
        # client_socket.send(response_data.encode("utf8"))

    def start(self):
        while True:
            client_socket, addr = self.tcp_server_socket.accept()
            client_process = multiprocessing.Process(target=self.handler_client_request, args=(client_socket,))
            client_process.daemon = True
            client_process.start()
            client_socket.close()

    def __str__(self):
        return "CG webSocket"


if __name__ == '__main__':
    # 获取动态端口
    # argv 获取终端命令参数如:python xx.pu 8080 可获取列表['xx.py','8080']
    # if len(sys.argv) != 2:
    #     "正确格式是:python 文件名 端口号"
    # else:
    #     port = sys.argv[1]
    port = 9090
    webSocket = WebSocket(int(port))
    webSocket.start()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;最新资料推荐&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip; Web服务器安全加固步骤 IIS Web服务器安全加固步骤: Web服务器安全加固步骤全文共12页,当前为第1页。 Web服务器安全加固步骤全文共12页,当前为第1页。 步骤 注意: 安装和配置 Windows Server 2003。 将<systemroot>\System32\cmd.exe转移到其他目录或更名; 系统帐号尽量少,更改默认帐户名(如Administrator)和描述,密码尽量复杂; 拒绝通过网络访问该计算机(匿名登录;内置管理员帐户;Support_388945a0;Guest;所有非操作系统服务帐户) 建议对一般用户只给予读取权限,而只给管理员和System以完全控制权限,但这样做有可能使某些正常的脚本程序不能执行,或者某些需要写的操作不能完成,这时需要对这些文件所在的文件夹权限进行更改,建议在做更改前先在测试机器上作测试,然后慎重更改。 NTFS文件权限设定(注意文件的权限优先级别比文件夹的权限高): 文件类型 建议的 NTFS 权限 CGI 文件(.exe、.dll、.cmd、.pl) 脚本文件 (.asp) 包含文件(.inc、.shtm、.shtml) 静态内容(.txt、.gif、.jpg、.htm、.html) Everyone(执行) Administrators(完全控制) System(完全控制) 禁止C$、D$一类的缺省共享 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters AutoShareServer、REG_DWORD、0x0 禁止ADMIN$缺省共享 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters AutoShareWks、REG_DWORD、0x0 限制IPC$缺省共享 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa restrictanonymous REG_DWORD 0x0 缺省 0x1 匿名用户无法列举本机用户列表 0x2 匿名用户无法连接本机IPC$共享 说明:不建议使用2,否则可能会造成你的一些服务无法启动,如SQL Server 仅给用户真正需要的权限,权限的最小化原则是安全的重要保障 Web服务器安全加固步骤全文共12页,当前为第2页。在本地安全策略->审核策略中打开相应的审核,推荐的审核是: 账户管理 成功 失败 登录事件 成功 失败 对象访问 失败 策略更改 成功 失败 特权使用 失败 系统事件 成功 失败 目录服务访问 失败 账户登录事件 成功 失败 审核项目少的缺点是万一你想看发现没有记录那就一点都没辙;审核项目太多不仅会占用系统资源而且会导致你根本没空去看,这样就失去了审核的意义。 与之相关的是: 在账户策略->密码策略中设定: 密码复杂性要求 启用 密码长度最小值 6位 强制密码历史 5次 最长存留期 30天 在账户策略->账户锁定策略中设定: 账户锁定 3次错误登录 锁定时间 20分钟 复位锁定计数 20分钟 Web服务器安全加固步骤全文共12页,当前为第2页。 在Terminal Service Configration(远程服务配置)-权限-高级中配置安全审核,一般来说只要记录登录、注销事件就可以了。 解除NetBios与TCP/IP协议的绑定 控制面版——网络——绑定——NetBios接口——禁用 2000:控制面版——网络和拨号连接——本地网络——属性——TCP/IP——属性——高级——WINS——禁用TCP/IP上的NETBIOS 在网络连接的协议里启用TCP/IP筛选,仅开放必要的端口(如80) 通过更改注册表Local_Machine\System\CurrentControlSet\Control\LSA-RestrictAnonymous = 1来禁止139空连接 Web服务器安全加固步骤全文共12页,当前为第3页。修改数据包的生存时间(TTL)值 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters DefaultTTL REG_DWORD 0-0xff(0-255 十进制,默认值128) Web服务器安全加固步骤全文共12页,当前为第3页。 防止SYN洪水攻击 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcp
Web服务器配置与应用 Web服务器配置与应用全文共134页,当前为第1页。 内容 1 Web服务基本概念 2 Apache服务器 3 Apache图形配置工具 4 Apache的配置文件 Web服务器配置与应用全文共134页,当前为第2页。 Web服务基本概念 万维网 WWW (World Wide Web)并非某种特殊的计算机网络。 万维网是一个大规模的、联机式的信息储藏所。 万维网用链接的方法能非常方便地从因特网上的一个站点访问另一个站点,从而主动地按需获取丰富的信息。 这种访问方式称为"链接"。 Web服务器配置与应用全文共134页,当前为第3页。 万维网提供分布式服务 万维网 站点 A 万维网 站点 C 万维网站点 E 万维网站点 D 万维网站点 B 链接到 链接到 链接到 链接到 链接到 链接到 Web服务器配置与应用全文共134页,当前为第4页。 超媒体与超文本 万维网是分布式超媒体(hypermedia)系统,它是超文本(hypertext)系统的扩充。 一个超文本由多个信息源链接成。利用一个链接可使用户找到另一个文档。这些文档可以位于世界上任何一个接在因特网上的超文本系统中。超文本是万维网的基础。 超媒体与超文本的区别是文档内容不同。超文本文档仅包含文本信息,而超媒体文档还包含其他表示方式的信息,如图形、图像、声音、动画,甚至活动视频图像。 Web服务器配置与应用全文共134页,当前为第5页。 万维网的工作方式 万维网以客户服务器方式工作。 浏览器就是在用户计算机上的万维网客户程序。万维网文档所驻留的计算机则运行服务器程序,因此这个计算机也称为万维网服务器。 客户程序向服务器程序发出请求,服务器程序向客户程序送回客户所要的万维网文档。 在一个客户程序主窗口上显示出的万维网文档称为页面(page)。 Web服务器配置与应用全文共134页,当前为第6页。 万维网必须解决的问题 (1) 怎样标志分布在整个因特网上的万维网文档? 使用统一资源定位符 URL (Uniform Resource Locator)来标志万维网上的各种文档。 使每一个文档在整个因特网的范围内具有唯一的标识符 URL。 Web服务器配置与应用全文共134页,当前为第7页。 万维网必须解决的问题 (2) 用何协议实现万维网上各种超链的链接? 在万维网客户程序与万维网服务器程序之间进行交互所使用的协议,是超文本传送协议 HTTP (HyperText Transfer Protocol)。 HTTP 是一个应用层协议,它使用 TCP 连接进行可靠的传送。 Web服务器配置与应用全文共134页,当前为第8页。 万维网必须解决的问题 (3) 怎样使各种万维网文档都能在因特网上的各种计算机上显示出来,同时使用户清楚地知道在什么地方存在着超链? 超文本标记语言 HTML (HyperText Markup Language)使得万维网页面的设计者可以很方便地用一个超链从本页面的某处链接到因特网上的任何一个万维网页面,并且能够在自己的计算机屏幕上将这些页面显示出来。 Web服务器配置与应用全文共134页,当前为第9页。 万维网必须解决的问题 (4) 怎样使用户能够很方便地找到所需的信息? 为了在万维网上方便地查找信息,用户可使用各种的搜索工具(即搜索引擎)。 Web服务器配置与应用全文共134页,当前为第10页。 URL 的一般形式 由以冒号隔开的两大部分组成,并且在 URL 中的字符对大写或小写没有要求。 URL 的一般形式是: <协议>://<主机>:<端口>/<路径> ftp —— 文件传送协议 FTP http —— 超文本传送协议 HTTP News —— USENET 新闻 Web服务器配置与应用全文共134页,当前为第11页。 URL 的一般形式(续) 由以冒号隔开的两大部分组成,并且在 URL 中的字符对大写或小写没有要求。 URL 的一般形式是: <协议>://<主机>:<端口>/<路径> <主机> 是存放资源的主机 在因特网中的域名 Web服务器配置与应用全文共134页,当前为第12页。 URL 的一般形式(续) 由以冒号隔开的两大部分组成,并且在 URL 中的字符对大写或小写没有要求。 URL 的一般形式是: <协议>://<主机>:<端口>/<路径> 有时可省略 Web服务器配置与应用全文共134页,当前为第13页。 使用 HTTP 的 URL 使用 HTTP 的 URL 的一般形式 http://<主机>:<端口>/<路径> 这表示使用 HTTP 协议 Web服务器配置与应用全文共134页,当前为第14页。 使用 HTTP 的 URL 使用 HTTP 的 URL 的一般形式 http://<主机>:<端口>/<路径> 冒号和两个斜

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值