1.源代码开放的操作系统是
2.youtube视频如何下载?
3.怎样用C语言实现网络抓包?
4.upx使用实例
源代码开放的操作系统是
1. Linux操作系统是一个计算机操作系统,其内核名为“Linux”。
2. Linux操作系统是自由软件和开放源代码发展中最著名的例子之一。
3. 严格来说,“Linux”仅指内核,但实际上人们常用它来指代整个基于Linux内核的asp.ne 源码下载操作系统(也称为GNU/Linux),这包括了各种人机界面、应用和服务软件。
4. Linux软件通常被称为Linux发行版,它们是基于一系列组件的。
5. 一般的Linux发行版包含大量软件,如开发工具、数据库、Web服务器(例如Apache)、X Window、桌面环境(如GNOME和KDE)和办公套件(如OpenOffice.org)等。
6. Linux内核最初是为英特尔微处理器设计的,现在它支持从个人电脑到大型主机,甚至包括嵌入式系统在内的各种硬件设备。
7. Linux最初是个人狂热爱好者的产物,但现在已经成为广泛支持的一种操作系统,包括IBM和惠普等计算机业巨头。
8. 许多人认为,与其他商用Unix系统和微软Windows相比,作为自由软件的Linux具有低成本、高安全性、更值得信赖的优势。
9. 操作系统是控制其他程序运行、管理系统资源并为用户提供操作界面的系统软件集合。
. 早期的操作系统包括TRS-DOS、ROM OS、TI-/4、Commodore PET、和VIC-等。
. 非Unix商业操作系统包括CPM操作系统、MP/M-、UCSD P-system、Mini-FLEX、SSB-DOS和CP/M-等。
. Unix及类似系统包括A/UX(Apple UNIX)、Unix、微软Xenix、Chorus OS、Cromix、UNIflex和OS-9等。
. 其他操作系统包括Acorn Arthur、ARX、RISC OS、RISCiX、Amiga OS、Atari ST TOS、MultiTOS、MiNT等。
. 苹果电脑的操作系统包括Apple DOS、ProDOS、Mac OS和Mac OS X等。
. BeOS和A/UX是Digital/康柏(Compaq)的操作系统。
. 微软的操作系统包括MS-DOS、Xenix、Microsoft Bob和基于MS-DOS的Windows系列等。
. 智能手机操作系统包括Windows Mobile系列、Embedded Linux(如Moblin)、Symbian OS等。
. 还有其他操作系统,如动态可扩展操作系统MIT的Exo Kernel、华盛顿大学的SPIN、哈佛大学的VINO、伊利诺伊大学的源码时代分析Choices和ReactOS等。
youtube视频如何下载?
把*视频下载到手机或电脑上,我们才能不受网络*随时观看。本篇教程整理了条有效的*视频下载方法,操作起来都非常简单,MP4 P、4K、8K的高清视频和MP3音频、视频字幕都能成功下载。
本文目录(快捷导航)
方法1:在电脑上使用Free Download Manager方法2:在火狐浏览器中使用Easy * Video Downloader Express插件方法3:在电脑上使用DownSub下载视频字幕方法4:在电脑上使用Savieo方法5:在电脑上使用Loader.to方法6:在手机上使用* Premium方法7:在手机上使用TubeMate方法8:在视频地址里加入“SS”方法9:在电脑上使用*Mp4方法:在Firefox浏览器中使用* Downloader插件方法:在Opera浏览器中使用* Video and Audio Downloader插件方法:在电脑上使用Ddownr方法:在电脑上使用Y2mateTV方法:在电脑上使用KeepVid方法:在电脑上使用YTMP3方法:在电脑上使用ClipGrab方法:在电脑上使用VLC Media Player方法:在电脑上使用4K Video Downloader方法:在电脑上使用5KPlayer方法:使用iPhone或iPad下载视频如何找到最新的*视频下载工具关于受版权保护内容的说明
方法1:在电脑上使用Free Download Manager
Free Download Manager是下载*视频的好工具,这个工具我还没看到有别人分享过。以前,下载视频的时候我是用网页下载。但,这种方式不支持你下载高清的p的视频,只能下载低清晰度的。第二、不支持下载大文件,比如说你这个文件一点几个g、两点几个g、三点几个g它不行,不给下载,速度还很慢。后来,我就找到了这款工具,
/download-*-video/。
我觉得非常好用。它的特点是什么?第一,支持多平台,MacOS、Linux、windows,甚至安卓都可以用。第二,没有广告,也很安全,这个工具我已经用了很多年了,非常安全。现在,我们就来介绍一下这个工具如何使用。
1. 首先,我们到它的网站:Freedownloadmanager.org
2. 我们点“Free Download”,就能下载这个工具了。再跟大家讲一下它支持哪些版本。默认情况下,因为我是windows系统,所以下载的是windows版本的程序,它还支持MacOS、安卓、Linux和谷歌Chrome浏览器以及火狐浏览器的插件。所以,你要感兴趣的话,你也可以下载插件版本的,用起来更方便。
3. 下载后进行安装,安装完之后,我们来看看到底怎么下载视频。打开一个*的视频,点击右键,选择copy这个视频的地址:
4. 复制视频url地址的目的是用来放在Free Download Manager视频下载器中。打开下载器程序,点左上角的加号,然后它会自动把你刚才拷贝的视频地址给放进来,你只需要再点ok就可以了:
5. 下载工具开始分析这个视频,找出来它的各种格式,可以看到5.个g的p分辨率的都支持下载:
如果视频有字幕的话,这个工具也支持下载,上图中的毕业程序源码选项里会有字幕下载项目。
方法2:在火狐浏览器中使用Easy * Video Downloader Express插件
1. 首先,下载安装火狐浏览器。
2. 然后,用浏览器打开谷歌搜索“download * for firefox”,寻找火狐浏览器可以使用的*下载器插件:
搜到一个插件叫做“Easy * Video Downloader Express”,点击打开这个链接:
3. 在跳转到的插件页面中,可以把插件安装到火狐浏览器中,安装按钮和下图一致。插件添加后,显示如下:
4. 在*中找到你想要下载的视频,就可以在视频下方看到这么一个下载的按钮,点一下,里面有各种下载选项,有p、p、p,你可以选择你要下载的高清度:
5. 直接点击,就可以开始下载了。
方法3:在电脑上使用DownSub下载视频字幕
DownSub是一个免费的web应用程序,可以直接从Youtube、VIU、Viki、Vlive等网站下载视频字幕。这款工具支持下载的字幕格式:SRT,TXT。
DownSub不会强迫用户下载或安装任何类型的扩展或第三方软件。它提供了一种在线下载视频字幕的方法,只需输入视频的URL并点击下载,操作步骤如下:
1. 首选,复制*视频的url地址。你可以在视频上右键点击copy,也可以在视频下方的分享share中找到视频地址:
2. 然后,我们打开DownSub网站:Downsub.com,这是专门下载*字幕的网站:
3. 我们把之前得到的Youtube视频链接粘贴到上图的框中,然后我们只需要点“DOWNLOAD”,下载工具就会自动分析这个视频中包含的字幕信息。分析好了后,它会提供两个下载版本:
一个是SRT版本,这就是标准的字幕文件;还有一个TXT文件版本,都可以下载。同时,这个工具可以侦测出Youtube视频字幕是哪种语言。如果,你想要把字幕翻译成其他语言,可以在第二语言中进行选择,就会生成对应的语言版本:
方法4:在电脑上使用Savieo
Savieo是一款线上的下载视频的工具,支持常见的*等平台的视频下载,只需要把视频的网址粘贴进入,就可以在线下载视频,具体操作步骤:
1. 首先,打开Savieo的官网:Savieo.com:
在它的首页上,我们可以发现这款视频下载工具不仅仅支持*的视频,还支持很多其他视频网站:
2. 把待下载视频的Url地址填入框中,然后点击DOWNLOAD按钮,这个工具会解析视频,给出几个不同清晰度的下载选项:
3. 选择你想要下载的版本,比如p的,点击对应清晰度后面的“DOWNLOAD”,会跳转到对应分辨率的视频界面,然后在视频右下角进行下载:
方法5:在电脑上使用Loader.to
这款工具可以用来下载各种格式的*视频,最高可支持8K分辨率的视频下载。使用它的方法也很简单:
1. 首先打开其官网:Loader.to,然后填入你想要下载的视频地址,选择好格式,点击“DOWNLOAD”解析视频:
2. 视频会在下方进行解析,完成后即可下载:
方法6:在手机上使用* Premium
如果您不住在这些国家/地区之一,下载视频需要订阅* Premium。源码编写学习此订阅费用为个人每月.美元或同一家庭中最多5人每月 .美元,并包括订阅*音乐等多种福利。
无论您是否需要高级订阅,过程都完全相同。虽然这是下载*视频的最简单方法,但您将无法在应用程序之外访问视频;为此需要第三方工具的帮助。
购买* Premium后,下载视频的方法:
1. 在手机上打开*应用。
2. 打开您要下载的视频。
3. 点击视频下方的下载按钮。
4. 选择下载的视频质量。如果您尚未订阅* Premium,该应用会在您下载视频之前提示您进行订阅,
/download-*-video/。
5. 点击下载。
下载后,“下载”按钮将变为黑色勾号并显示“已下载”。离线时可以在*应用的主页选项卡中访问下载的视频。
您可以通过点击“Downloaded”按钮并点击删除来删除已下载的*视频。
方法7:在手机上使用TubeMate
TubeMate是允许您下载*视频的众多服务之一,使用方法如下:
1. 通过APKMirror下载TubeMate应用程序。
2. 打开*应用。
3. 打开您要下载的视频。
4. 点击视频正下方的分享图标。
5. 点击应用列表上的TubeMate。
6. 允许TubeMate获取权限。
7. 选择下载的视频格式。
8. 点击红色的下载按钮。
9. 点击屏幕底部的向下箭头,以查看下载状态。
您可以通过两种方式访问下载的视频。打开TubeMate应用程序并点击屏幕底部的已下载按钮,或者您可以在手机存储中找到视频。它们将位于Google文件的内部存储 视频中。
方法8:在视频地址里加入“SS”
无需安装软件即可下载*视频的第一个选项是通过SaveFromNet。SaveFromNet声称它提供了一种使用其“SS”来获取*视频的简单、快捷的方法。借助此功能,您只需在*链接中添加代码“SS”,即可使用这款基于网络的应用程序尽快获取视频。
同时,使用SaveFromNet,您可以将视频保存为MP4和WEBM格式。您还可以下载高质量*视频,因为它提供高达p的分辨率。 此外,SaveFromNet还能够将*视频转换为MP3格式。如果您想知道如何在不安装软件的情况下从*下载视频,请依照以下步骤,
/download-*-video/。
1. 从网络浏览器访问*的官方网站并选择一个您想要下载的视频。
2. 接下来,将鼠标悬停在页面最上方的URL栏中。然后,在*.com 之前输入“SS”,然后单击Enter键。
3. 之后,您将被自动重定向到*视频下载页面。在此处,单击下载按钮旁边的下拉菜单。然后,从提供的格式(MP4、MP3 和 WEBM)中选择一种并等待片刻,直到您的文件成功下载。
方法9:在电脑上使用*Mp4
*Mp4是一个第三方网站可以让用户在几分钟内下载*视频。您所要做的就是复制粘贴视频的链接,网站会自动将视频保存在您的神奇源码网址PC上。
对于不想费事更改URL的人来说,这是一个合适的选择。只需单击一下,您就可以在您的计算机上下载任何*视频。更好的是所有这些都是免费提供的,这意味着您无需支付一分钱即可下载*视频。请按照以下步骤下载视频:
1. 打开*并复制您要下载的视频链接。
2. 转到第三方网站并将链接粘贴到给定的文本栏中。
3. 点击“Go”并选择视频质量。这会将视频保存在您的计算机上,您可以随时观看。
或者,点击页面中的“Download Video”,可以跳转到视频下载页面。
继续,点击页面中视频右下角的三个点标志。
即可看到下载按钮,点击开始下载视频。
方法:在Firefox浏览器中使用* Downloader插件
在Mozilla Firefox浏览器中的“扩展”选项卡搜索“* Downloader”,找到后,安装扩展程序并播放您要下载的*视频。
现在,只需从列表中选择你想要的视频质量,进行下载即可,视频将保存在您的电脑上。使用此扩展程序的主要优点是您可以单独下载mp3文件,如果您只想保存音轨而不需要视频,这将很有帮助;另外,使用它,我们还可以下载p超高清视频。
方法:在Opera浏览器中使用* Video and Audio Downloader插件
* Video and Audio Downloader是Opera浏览器的专用扩展程序,允许用户从*下载mp4视频及mp3格式音频。凭借其一键下载功能,您将能够在几秒钟内开始下载所需的视频。
方法:在电脑上使用Ddownr
Ddownr是一款快速、安全且免费的在线下载器,让您无需软件即可下载高质量的*视频。您需要做的就是按照以下步骤操作:
1. 复制您要从*下载的视频的URL。
2. 将视频URL粘贴到Ddownr。
3. 单击下载以指定播放列表中的视频分辨率(支持P的MP4和最高8K的WEBM视频格式)。
4. 准备就绪后,视频会以ZIP文件的形式下载到您的计算机上。
方法:在电脑上使用Y2mateTV
Y2mate是*顶级下载工具之一,可让您在没有软件的情况下以高清质量下载*视频。它还支持所有格式并且非常易于使用,您需要做的就是按照以下步骤操作:
1. 搜索要下载的视频的名称或复制粘贴视频的链接。
2. 选择视频/音频格式,然后单击“下载”。
3. 等到转换完成后再下载文件。
Y2mate * Converter不仅是一个视频转换器,还是一个音频转换器。您可以轻松地将 * 视频、**、音乐、在线课程、MTV、播放列表等转换为您想要的格式,例如 MP4、kbps MP3。 MOV、WMV、AVI、FLV、MKV、M4A、MKA、WAV、AAC、FLAC、AIFF、OGG(所有这些格式都可以在桌面软件上使用)。MP3、MP4格式兼容多种设备,可以在Windows、Mac、iPhone、iPad、Android手机上流畅播放和观看。在线 Y2mate * 转换器完全支持标清、高清P、全高清P、超高清4K视频。
方法:在电脑上使用KeepVid
Keepvid拥有一体化视频解决方案,这意味着对您而言,无需任何软件即可下载*视频。
Keepvid允许您在任何网站上下载视频,并提供在线视频转换器、在线视频压缩器、在线视频编辑器等等工具。使用Keepvid,您只需按照以下步骤操作:
1. 从*视频页面复制链接。
2. 将链接粘贴到Keepvid网站的顶部文本框中。
3. 选择视频格式,开始下载。
方法:在电脑上使用YTMP3
YTMP3是下载速度最快的站点之一,并且可以免费使用。它还可以将*视频转换为kbps mp3格式。要在Ytmp3上下载视频,您需要做的就是:
1. 复制您要下载的视频的URL链接。
2. 等待几秒钟以获取下载选项。
3. 单击红色的“下载”按钮,视频立即开始下载。
只需单击一下,整个视频和音乐世界供您欣赏。使用YTMP3 *转换器将*视频转换为MP3、MP4、M4A 格式。除了*,YTMP3转换器还支持1,多个流行的流媒体网站,提供高速下载和无损转换。
支持的格式:mp3,mp4,HD mp4,m4a,webm,MOV,AVI,MKV,3GP,WAV,MKA;
支持的网站:*、*、Instagram、Vimeo、Reddit、SoundCloud、Twitter、Lynda、VEVO、Liveleak、Bilibili、BBC、Foxnews、MTV、NBC、Coub、Vlive、Einthusan、MixCloud 和更多在线视频/音乐门户。
支持的视频分辨率:p、p、p、p、p、p、4K。
支持的MP3比特率: kbps、 kbps、 kbps、 kbps。
方法:在电脑上使用ClipGrab
ClipGrab是适用于Mac、Windows和Linux用户的免费程序。它是开源的,但源代码仅适用于Linux。访问ClipGrab.org,然后单击显示所有下载选项,您将在那里看到Mac、Windows和Linux的下载链接。我将在本文中向您展示Mac版本,这三个版本的界面几乎相同,使用方法是一样的。
1. 复制*视频的链接。您可以在浏览器的URL栏中执行此操作,或单击视频本身下方的“共享”按钮。
2. 启动ClipGrab,确保您位于“Downloads”选项卡上。
3. 粘贴您要下载的视频的URL。
4. 最后,单击“Grab This Clip”。
您可以调整一些选项。
例如,您可以选择视频在计算机上存储时的格式。我通常选择Original,但如果这不起作用,我会指定其他内容。
您还可以选择下载的分辨率。根据视频的原始分辨率,您可以选择下载全分辨率视频或降低分辨率以节省空间。
最后,点击“Settings”选项卡可让您自定义ClipGrab将新下载的视频存放在何处。
方法:在电脑上使用VLC Media Player
VLC媒体播放器几乎可以播放所有类型的媒体文件,它还可以用于下载*视频,方法如下(如果遇到任何问题,请尝试重新安装VLC并清除缓存以使其正常工作):
1. 如果您的Windows PC上还没有该程序,请下载并安装最新版本的VLC媒体播放器。
2. 将*视频的URL复制到剪贴板。
3. 打开VLC并单击左上角的媒体菜单,选择打开网络流。
4. 将复制的视频地址粘贴到“Please enter the network URL”框中,点击播放。*视频将开始在VLC中播放。
5. 现在转到Tools Codec并从窗口底部的位置框中复制长URL。
6. 将此URL粘贴到浏览器的地址栏中,然后单击“OK”,视频将在新选项卡中开始播放。
右键单击,并选择“将视频另存为”以将*视频下载为MP4文件。
方法:在电脑上使用4K Video Downloader
4K Video Downloader可以抓取质量高达8K的视频,并提供多种下载格式。只需复制*视频的URL并单击粘贴链接按钮即可开始。
4KVD甚至可以抓取字幕、整个播放列表以及您订阅的频道中的所有视频。支持的网站仅限于*、Vimeo、*和其他一些知名网站,免费版本每天只能下载个视频。
如果您想同时下载超过个视频或订阅*频道以立即下载最新视频,则需要付费版本。该程序本身具有将音频提取为MP3格式的选项,因此您不需要另外配套软件。此软件的使用方法如下:
1. 下载安装4K Video Downloader,并打开程序。
2. 找到一个*视频并复制链接。
3. 单击菜单中的“Paste Link”。
4. 从视频质量和格式选项列表中进行选择,然后单击下载。
5. 下载视频后,单击三点图标,您可以播放或在计算机上找到它并执行其他操作。
方法:在电脑上使用5KPlayer
5KPlayer不仅仅是一个下载器,而是一个集成的下载器。承诺没有病毒、广告或插件要求,您必须先注册才能在多个站点上获得完整的下载功能。但是,您仍然可以在不注册的情况下从*获取4K视频。
1. 粘贴*视频的URL后,仅显示几个下载选项。
2. 单击齿轮图标,然后单击“全部显示”按钮,然后滚动查看更多信息,例如WebM格式的4K 3, x 2, 文件。MB WebM 测试下载耗时6.5分钟。
5K播放器还具有DLNA服务器播放功能,因此您可以在任何支持DLNA的设备上观看您抓取的视频,此外它还支持AirPlay以快速播放到 Apple设备。在库中选择一个视频以快速转换为MP4、MP3 甚至 ACC(iOS 首选的音频格式)。不过,它的播放器不方便播放过大的4K文件,容易遇到缓冲问题。
方法:使用iPhone或iPad下载视频
在iPhone和iPad上下载*视频有点麻烦,因为Apple会监管其商店中的应用程序。如果你越狱你的手机,还有更多的选择,但如果你不想走那条路,以下是最简单的方法:
1. 下载并打开Documents by Readdle应用程序。
2. 点击指南针图标打开网络浏览器并转到online video downloader。
3. 在文本框中粘贴*视频链接,然后点击“下载”。片刻之后,视频将解码并生成不同输出格式和质量选项的列表。
4. 点击首选输出选项上的“下载”。
5. 输入视频的名称和下载位置。
6. 点击底部导航栏中的下载部分,在Documents应用程序中查看您下载的视频。
7. 要将下载的视频保存到iPhone或iPad中,请返回Documents应用程序主屏幕并打开您的下载文件夹。
8. 找到您想要的视频,然后点击上面的三个点图标。
9. 点击分享,然后保存视频。
. 您可以在照片应用中找到下载的*视频。
如何找到最新的*视频下载工具
时间久了,难免有些*视频下载器会失效,这里教大家一个简单的方法找到最新版本可用的*视频下载工具。你只需要在Google里搜索:* downloader即可,肯定能够找到可以用的:
关于受版权保护内容的说明
*的条款中允许通过官方应用下载视频,该视频无法在应用之外观看,并且您无权获取源文件。但是,如果您通过第三方工具下载 *视频,则需要了解*的服务条款 (ToS) 和版权法。如果发现您违反此规定,*可以暂停或终止您的帐户。其次,您需要确保您没有违反版权法。可以合法下载的视频包括:
无版权的公共领域视频。视频受知识共享 (CC) 许可保护,*包含一个搜索过滤器,用于搜索属于此许可的视频。已给您授权的朋友或家人创建的视频。
怎样用C语言实现网络抓包?
第一法则:站在巨人肩膀上 && 不要重复造轮子。对于这种复杂的过程,第一选择是使用现成的,节约时间,提升效率。
Wireshark(前称Ethereal)是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换。
网络封包分析软件的功能可想像成 "电工技师使用电表来量测电流、电压、电阻" 的工作 - 只是将场景移植到网络上,并将电线替换成网络线。在过去,网络封包分析软件是非常昂贵,或是专门属于营利用的软件。Ethereal的出现改变了这一切。在GNUGPL通用许可证的保障范围底下,使用者可以以免费的代价取得软件与其源代码,并拥有针对其源代码修改及客制化的权利。Ethereal是目前全世界最广泛的网络封包分析软件之一。
第二法则:学习 && 提升。
如果是单纯的学习知识,可以直接尝试写一些具有部分功能的程序,过程会有点艰难,但非常有意义。学习网络编程,需要了解 开放系统互连参考模型的的七层每一层的意义以及现实当中实现的四层的网络协议。然后就可以知道抓包的包位于模型当中的传输层协议,包括UDP和TCP的协议。进一步要学习每种协议的格式,表头,数据包等等。一句话,冰冻三尺非一日之寒。
Windows下的抓包及简单的编程。
Windows在TCP/IP协议组件上做了很多改进,功能也有增强。比如在协议栈上的调整,增大了默认窗口大小,以及高延迟链接新算法。同时在安全性上,可应用IPSec加强安全性,比NT下有不少的改进。
Microsoft TCP/IP 组件包含“核心协议”、“服务”及两者之间的“接口”。传输驱动程序接口 (TDI) 与网络设备接口规范 (NDIS) 是公用的。 此外,还有许多用户模型应用程序的更高级接口。最常用的接口是 Windows Sockets、远程过程调用 (RPC) 和 NetBIOS。
Windows Sockets 是一个编程接口,它是在加州大学伯克利分校开发的套接字接口的基础上定义的。它包括了一组扩展件,以充分利用 Microsoft Windows 消息驱动的特点。规范的 1.1 版是在 年 1 月发行的,2.2.0 版在 年 5 月发行。Windows 支持 Winsock 2.2 版。在Winsock2中,支持多个传输协议的原始套接字,重叠I/O模型、服务质量控制等。
这里介绍Windows Sockets的一些关于原始套接字(Raw Socket)的编程。同Winsock1相比,最明显的就是支持了Raw Socket套接字类型,通过原始套接字,我们可以更加自如地控制Windows下的多种协议,而且能够对网络底层的传输机制进行控制。
1、创建一个原始套接字,并设置IP头选项。
SOCKET sock;
sock = socket(AF_INET,SOCK_RAW,IPPROTO_IP);
或者:
s = WSASoccket(AF_INET,SOCK_RAW,IPPROTO_IP,NULL,0,WSA_FLAG_OVERLAPPED);
这里,我们设置了SOCK_RAW标志,表示我们声明的是一个原始套接字类型。创建原始套接字后,IP头就会包含在接收的数据中,如果我们设定 IP_HDRINCL 选项,那么,就需要自己来构造IP头。注意,如果设置IP_HDRINCL 选项,那么必须具有 administrator权限,要不就必须修改注册表:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Afd\Parameter\
修改键:DisableRawSecurity(类型为DWORD),把值修改为 1。如果没有,就添加。
BOOL blnFlag=TRUE;
setsockopt(sock, IPPROTO_IP, IP_HDRINCL, (char *)&blnFlag, sizeof(blnFlag);
对于原始套接字在接收数据报的时候,要注意这么几点:
a、如果接收的数据报中协议类型和定义的原始套接字匹配,那么,接收的所有数据就拷贝到套接字中。
b、如果绑定了本地地址,那么只有接收数据IP头中对应的远端地址匹配,接收的数据就拷贝到套接字中。
c、如果定义的是外部地址,比如使用connect(),那么,只有接收数据IP头中对应的源地址匹配,接收的数据就拷贝到套接字中。
2、构造IP头和TCP头
这里,提供IP头和TCP头的结构:
// Standard TCP flags
#define URG 0x
#define ACK 0x
#define PSH 0x
#define RST 0x
#define SYN 0x
#define FIN 0x
typedef struct _iphdr //定义IP首部
{
unsigned char h_lenver; //4位首部长度+4位IP版本号
unsigned char tos; //8位服务类型TOS
unsigned short total_len; //位总长度(字节)
unsigned short ident; //位标识
unsigned short frag_and_flags; //3位标志位
unsigned char ttl; //8位生存时间 TTL
unsigned char proto; //8位协议 (TCP, UDP 或其他)
unsigned short checksum; //位IP首部校验和
unsigned int sourceIP; //位源IP地址
unsigned int destIP; //位目的IP地址
}IP_HEADER;
typedef struct psd_hdr //定义TCP伪首部
{
unsigned long saddr; //源地址
unsigned long daddr; //目的地址
char mbz;
char ptcl; //协议类型
unsigned short tcpl; //TCP长度
}PSD_HEADER;
typedef struct _tcphdr //定义TCP首部
{
USHORT th_sport; //位源端口
USHORT th_dport; //位目的端口
unsigned int th_seq; //位序列号
unsigned int th_ack; //位确认号
unsigned char th_lenres; //4位首部长度/6位保留字
unsigned char th_flag; //6位标志位
USHORT th_win; //位窗口大小
USHORT th_sum; //位校验和
USHORT th_urp; //位紧急数据偏移量
}TCP_HEADER;
TCP伪首部并不是真正存在的,只是用于计算检验和。校验和函数:
USHORT checksum(USHORT *buffer, int size)
{
unsigned long cksum=0;
while (size > 1)
{
cksum += *buffer++;
size -= sizeof(USHORT);
}
if (size)
{
cksum += *(UCHAR*)buffer;
}
cksum = (cksum >> ) + (cksum & 0xffff);
cksum += (cksum >>);
return (USHORT)(~cksum);
}
当需要自己填充IP头部和TCP头部的时候,就同时需要自己计算他们的检验和。
3、发送原始套接字数据报
填充这些头部稍微麻烦点,发送就相对简单多了。只需要使用sendto()就OK。
sendto(sock, (char*)&tcpHeader, sizeof(tcpHeader), 0, (sockaddr*)&addr_in,sizeof(addr_in));
下面是一个示例程序,可以作为SYN扫描的一部分。
#include <stdio.h>
#include <winsock2.h>
#include <ws2tcpip.h>
#define SOURCE_PORT
#define MAX_RECEIVEBYTE
typedef struct ip_hdr //定义IP首部
{
unsigned char h_verlen; //4位首部长度,4位IP版本号
unsigned char tos; //8位服务类型TOS
unsigned short total_len; //位总长度(字节)
unsigned short ident; //位标识
unsigned short frag_and_flags; //3位标志位
unsigned char ttl; //8位生存时间 TTL
unsigned char proto; //8位协议 (TCP, UDP 或其他)
unsigned short checksum; //位IP首部校验和
unsigned int sourceIP; //位源IP地址
unsigned int destIP; //位目的IP地址
}IPHEADER;
typedef struct tsd_hdr //定义TCP伪首部
{
unsigned long saddr; //源地址
unsigned long daddr; //目的地址
char mbz;
char ptcl; //协议类型
unsigned short tcpl; //TCP长度
}PSDHEADER;
typedef struct tcp_hdr //定义TCP首部
{
USHORT th_sport; //位源端口
USHORT th_dport; //位目的端口
unsigned int th_seq; //位序列号
unsigned int th_ack; //位确认号
unsigned char th_lenres; //4位首部长度/6位保留字
unsigned char th_flag; //6位标志位
USHORT th_win; //位窗口大小
USHORT th_sum; //位校验和
USHORT th_urp; //位紧急数据偏移量
}TCPHEADER;
//CheckSum:计算校验和的子函数
USHORT checksum(USHORT *buffer, int size)
{
unsigned long cksum=0;
while(size >1)
{
cksum+=*buffer++;
size -=sizeof(USHORT);
}
if(size )
{
cksum += *(UCHAR*)buffer;
}
cksum = (cksum >> ) + (cksum & 0xffff);
cksum += (cksum >>);
return (USHORT)(~cksum);
}
void useage()
{
printf("