• socket


    socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求。

    socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,对于文件用【打开】【读写】【关闭】模式来操作。socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭)

    socket和file的区别:

    • file模块是针对某个指定文件进行【打开】【读写】【关闭】
    • socket模块是针对 服务器端 和 客户端Socket 进行【打开】【读写】【关闭】

       

    在一个机器上有许多的协议,如http smtp dns ftp ssh snmp icmp dhcp …… ,这些协议大多都是在osi七层模型中传输层之上的应用层,传输层才开始能真正的传输数据;Icmp 是网络层,不传输数据,就发一个ping包;

    两个机器实现通信必须实现一些规则,也就是遵循 TCP/IP协议 或者UDP 的协议;

    对于TCP/IP 、UDP 收发消息的封装就是socket;Socket 就只做两件事情,收数据,发数据;收发什么数据自己定义;

    代码实现如下:

    #客户端
    import socket
    client = socket.socket() #声明socket类型,同时生成socket连接对象
    client.connect(("localhost",6969))  #连接哪个ip的哪个端口

    client.send(b"Hello World")      #发送消息
    data = client.recv(1024) #接收1024个字节,也就是1Kb  #接收数据
    print("recv:",data)
    client.close()

    ----------------------------------------------------------------------------
    #服务器端
    import socket
    server = socket.socket()
    server.bind(('localhost',6969)) #绑定要监听的端口
    server.listen() #监听

    print("我要开始等电话了")
    conn,addr = server.accept() #等电话打进来,接收电话
    #conn 就是客户端连接过来而在服务器端为其生成的一个连接实例;客户端连接过来的时候会带上自己的ip 和端口
    # Addr 就是客户端的ip地址和端口

    print(conn,addr)
    print("电话来了")
    data = conn.recv(1024)
    conn.send(data.upper())  #把接收到的消息,修改为大写,返回给客户端
    server.close()        #服务器端关闭所有连接,如果有多个客户端连接都关闭

    #Python 2 中可以发送byte和字符串(str)类型的数据

    #Python3 中只能发送byte类型的数据



    -------------------------------------------------
    可以根据socket.SOCK_RAW修改IP头,可以实现dos(洪水)攻击,因为是tcp协议的有三次握手,客户端给服务器端发一个连接数据ip和端口是伪造的,服务器端收到后给那个ip 的端口发送一条建立连接的数据,一直等待客户端确认回复,因为等待确认回复的时候也占用资源,所以大量发送不存在的ip和端口和服务器建立连接的的数据,就可以达到洪水攻击;nignx可以实现把等待时间调小点,让占用资源快速释放;
    客户端给服务器端发送数据的时候会带上本机的ip和请求的端口;

     参考:

    http://www.cnblogs.com/wupeiqi/articles/5040823.html

    https://www.cnblogs.com/fanweibin/p/5053328.html

    https://www.cnblogs.com/aylin/p/5572104.html

    #洪水攻击参考:

    https://www.cnblogs.com/lang5230/p/5507775.html

  • 相关阅读:
    Windows7下面手把手教你安装Django
    windows系统下Python环境的搭建
    PHP、Java、Python、C、C++ 这几种编程语言都各有什么特点或优点
    结构化程序设计 ?
    编译性语言、解释性语言和脚本语言
    在linux中关闭防火墙
    Linux下Apache服务的查看和启动
    AWS中,如果使用了ELB,出现outofservice
    亚马逊的PuTTY连接AWS出现network error connection refused,终极解决方案。
    9.Node.js 包管理器npm
  • 原文地址:https://www.cnblogs.com/lighthouse/p/9828522.html
Copyright © 2020-2023  润新知