zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    SkylineGlobe 7.0.1 & 7.0.2版本Web开发 如何实现对三维模型和地形的剖切展示
    SkylineGlobe 7.0.1 & 7.0.2版本Web开发 如何正确使用三维地图控件和工程树控件
    SkylineGlobe TerraExplorer for Web 7.1.0版本 接口示例
    如何解决一个从SkylineGlobe5版本升级到7版本遇到的小问题
    Cesium如何通过addImageryProvider方法加载SkylineGlobe Server发布的WMS服务
    SkylineGlobe7.0.1版本 支持SQLite(*.sqlite;*.db)数据库
    SkylineGlobe7.0.1版本 通过鼠标左右平移模型对象
    显示器文字发虚的一种原因
    HttpClient + IIS压缩动态内容
    C# Async Await 注意事项
  • 原文地址:https://www.cnblogs.com/lighthouse/p/9828522.html
Copyright © 2011-2022 走看看