跳至主要内容

网络编程之认识网络协议

http://ift.tt/2eDvKc7

网络协议

  1. ARP协议
    1. 地址解析协议
    2. 位于链路层
    3. 根据ip获取mac地址

    4. ARP缓存中毒
      1. 只要有人回复,就会把ip和mac地址链接在一起
      2. 中间人攻击
      3. 只能在局域网下使用,在广域网下不能使用
  2. IP协议
    1. 是一个32位的数值
    2. 网络地址
    3. 主机地址
    4. 特殊的ip地址
      1. 127.0.0.1 本机的回送地址
      2. 0.0.0.0 当前主机
      3. 1,255.255.255.255 当前子网的广播地址,最后面带255的都是广播地址
      4. 最后一位是1的,网关地址
  3. ICMP协议
    1. 用来做差错控制
      1. 在ip主机和路由器之间控制消息
    2. 分为两类
      1. 查询报文
      2. 差错报文
  4. TCP协议:传输控制协议
    1. 为数据提供可靠的端到端的传输
    2. 能够处理数据的顺序和错误恢复,能够保证数据能够到达应改到达的地方
    3. 会使用端口来标识应用程序
    4. 提供流量控制
  5. UDP协议
    1. 是一种无连接的传送层协议, 提供不可靠的传输服务
    2. UDP的特点
      1. 提供无连接服务
      2. 不能确保UDP数据报最终到达目的地
      3. UDP的传输速度把TCP快,占用系统资源少
  6. HTTP协议:超文本传送协议
    1. 特点:
      1. 简单方便
        1. 客户向服务器请求服务的时候,只需要传送请求方法和路径
          1. 常用的请求方法有
            1. post
            2. get
            3. head
      2. 灵活
        1. http允许任意类型的数据对象
      3. 无连接,无状态
        1. 无连接的含义就限制每次链接只处理一个请求
          1. 服务器处理完用户的请求,并且收到用户发过来的确认应答后,就会断开链接
            1. 这样可大大的节省传输时间
        2. 无连接就意味着无状态
          1. 就是服务器不能够保存上次请求的状态
          2. 如果这条状态需要处理上一条的信息,则需要把上次的信息重新发送一遍
            1. 这就导致了每次发送的数据量较大
            2. 一般来说,服务器为每一个登录用户维持一个session来记忆状态
          3. http1.1 之后,引入了持久链接(presitent connetcion),默认tcp不关闭
            1. 默认声明字段 connetciton :keep-alive

           
           

       
       

The post 网络编程之认识网络协议 appeared first on cole.

http://ift.tt/2j0kb3E internet September 06, 2017 at 10:41AM

评论

此博客中的热门博文

反Hook 之自己实现GetProcAddress和LoadLibraryA(c++ version)

http://ift.tt/2AocAD0 // 课上练习.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <windows.h> //要实现的功能: /* 自己实现GerProcAddress LoadLibraryA */ //思路: /* GerProcAddress和LoadLibraryA都是在Kernel32.dll中的 首要的任务就是找到Kernel32.dll,然后遍历IAT就能找到这两个函数 现在首要的难点就是如何找到kernel32.dll() 通过dll的加载顺序可以找到,而且虽然需要使用未文档化的API,但是好在windgb可以直接看,而且用到的也并不是很多 懒得去晚上搜了,直接自己实现一个得了,作为演示,能用就行(最好还是搜一个正规的结构体) */ /* 0: kd> dt _TEB /a nt!_TEB +0x000 NtTib : _NT_TIB +0x01c EnvironmentPointer : Ptr32 Void +0x020 ClientId : _CLIENT_ID +0x028 ActiveRpcHandle : Ptr32 Void +0x02c ThreadLocalStoragePointer : Ptr32 Void +0x030 ProcessEnvironmentBlock : Ptr32 _PEB //首先实现部分TEB结构体,因为只需要用的PEB的部分,所以实现到这就ok了 */ //构建 TEB typedef struct _TEB { //保证0x30是peb的结构体就ok了 struct _tem { DWORD a1; DWORD a2; DWORD a3; DWORD a4; DWORD a5; DWORD a6; DWORD a7; DWORD a8; DWORD a9; DWORD a10; ...

IDA动态调试ELF中遇到的问题(1)

https://ift.tt/2Gxnf2F 遇到 got SIGCHLD singal(child status has changed)...这种提示 singal fork了子进程 直接点yes,然后继续单步执行,出来提示 pass to application就行了 内存查看 用od习惯了之后,凡事都想右键看一下内存,但是IDA中好像没有那么如意, 目前只是在栈中右键发现有查看hex的选项 动态调试的时候的nop ida保存动态调试的时候修改的数据 方法一:在程序运行的时候保存 The post IDA动态调试ELF中遇到的问题(1) appeared first on cole . https://ift.tt/2q9Qf5g WHATEVER April 05, 2018 at 09:44AM

python3语法基础之函数和类

http://ift.tt/2xXd9ze 函数 什么是函数? 函数就是一些封装在一起,能够实现某种功能的代码段 函数的定义 在python中,函数通过def关键字定义 定义的格式如下: def 函数名 ( 参数 ) : 函数体 实参和形参 形参 函数定义的时候 , 写在参数列表中的变量名 实参 调用函数的时候,往函数里传递的数据 关于return 执行return语句的时候,肯定会从当前函数退出 return 可以返回值 如果没有写return ,python中默认 return None 局部变量和全局变量 在函数内或者类内定义的变量叫做局部变量,作用域只在函数或类内 定义在文件中,任何敌方都能访问到的叫全局变量 可以使用global 关键字把局部变量声明为全局变量 默认参数 python支持默认参数,也是从右向左赋值     def TestFun ( nNumA = 10 , nNumB = 20 ) : print ( nNumA , nNumB )     if __name__ == "__main__" : TestFun(); TestFun( 5 , 1 )     关键字参数 就是可以不按照顺序参数 def TestFun ( nNumA , nNumB ) : print ( nNumA , nNumB )     if __name__ == "__main__" : TestFun( nNumB = 5 , nNumA = 6 ) 变参 python中是通过* 来实现边长参数的 def TestFun ( nNumA , *args ) : print ( nNumA ) print ( args )     if __name__ == "__main__" : TestFun( 1 , 2 , 3 , 4 , 5 , 6 ) 边长的参数默认是一个元组     类 为什么会有面向对象理念? 因为所有的...