socket

linux 内核与用户空间通信之netlink使用方法

﹥>﹥吖頭↗ 提交于 2020-02-22 18:37:06
摘自 https://www.cnblogs.com/x_wukong/p/5920437.html 转自:http://blog.csdn.net/haomcu/article/details/7371835 Linux中的进程间通信机制源自于Unix平台上的进程通信机制。Unix的两大分支AT&T Unix和BSD Unix在进程通信实现机制上的各有所不同,前者形成了运行在单个计算机上的System V IPC,后者则实现了基于socket的进程间通信机制。同时Linux也遵循IEEE制定的Posix IPC标准,在三者的基础之上实现了以下几种主要的IPC机制:管道(Pipe)及命名管道(Named Pipe),信号(Signal),消息队列(Message queue),共享内存(Shared Memory),信号量(Semaphore),套接字(Socket)。通过这些IPC机制,用户空间进程之间可以完成互相通信。为了完成 内核空间 与 用户空间 通信,Linux提供了基于socket的Netlink通信机制,可以实现内核与用户空间数据的及时交换。 本文第2节概述相关研究工作,第3节与其他IPC机制对比,详细介绍Netlink机制及其关键技术,第4节使用KGDB+GDB组合调试,通过一个示例程序演示Netlink通信过程。第5节做总结并指出Netlink通信机制的不足之处。

TCP通信

筅森魡賤 提交于 2020-02-22 18:23:31
TCP通信是严格区分客户端与服务器端,在通信时,必须先由客户端去连接服务端才能实现通信,服务器端不可主动连接客户端,并且服务器端要事先启动,等待客户端的连接 实现TCP程序提供了两个类,一个是ServerSocket类,用于表示服务器端,一个是Socket,用于表示客户端 实现通信时,首先创建代表服务端的ServerSocket对象,该对象相当于开启一个服务,并等待客户端的连接,然后创建代表客户端的Socket对象向服务器发出连接请求,服务器端响应请求,两者建立连接开始通信 ServerSocket 有关于ServerSocket的构造方法 1、ServerSocket():创建对象的时候服务器端没有监听任何端口,不能之间使用,还需要继续调用bind(SocketAddress endpoint)方法将其绑定到指定的端口上面 2、ServerSocket(int port):创建对象时,就可以将其绑定到一个指定的端口上面,port就是指定的端口,端口号可以指定为0,这时就会分配一个还没有使用的端口号,由于客户端需要根据指定的端口号来访问服务器端程序,一般情况下会使用指定的端口号来进行访问服务器端 3、ServerSocket(int port ,int backlog):backlog用于指定服务器在忙时,可以与之保持连接请求的等待客户数量,如果没有指定这个参数,默认值是50 4

python中的select模块

本秂侑毒 提交于 2020-02-22 15:26:25
介绍: Python中的select模块专注于I/O多路复用,提供了select poll epoll三个方法(其中后两个在Linux中可用,windows仅支持select),另外也提供了kqueue方法(freeBSD系统) select方法: 进程指定内核监听哪些文件描述符(最多监听1024个fd)的哪些事件,当没有文件描述符事件发生时,进程被阻塞;当一个或者多个文件描述符事件发生时,进程被唤醒。 当我们调用select()时:   1 上下文切换转换为内核态   2 将fd从用户空间复制到内核空间   3 内核遍历所有fd,查看其对应事件是否发生   4 如果没发生,将进程阻塞,当设备驱动产生中断或者timeout时间后,将进程唤醒,再次进行遍历   5 返回遍历后的fd   6 将fd从内核空间复制到用户空间 fd:file descriptor 文件描述符 fd_r_list, fd_w_list, fd_e_list = select.select(rlist, wlist, xlist, [timeout]) 参数: 可接受四个参数(前三个必须)rlist: wait until ready for readingwlist: wait until ready for writingxlist: wait for an “exceptional condition

Moonraker 靶机渗透

生来就可爱ヽ(ⅴ<●) 提交于 2020-02-22 08:25:29
0x01 简介 攻击Moonraker系统并且找出存在最大的威胁漏洞,通过最大威胁漏洞攻击目标靶机系统并进行提权获取系统中root目录下的flag信息。 Moonraker: 1镜像下载地址: http://drive.google.com/open?id=13b2ewq5yqre2UbkLxZ58uHtLfk-SHvmA 0x02 信息搜集 1.获取目标ip地址,使用netdiscover或者arp-scan。 2.使用nmap进行端口和服务探测 在3000端口发现Node.js Express framework框架应用。 访问web服务,是一段视频 视频动画会持续10几秒,之后自动跳转至如下页面 http://192.168.190.136/moonraker.html 点击blog进行一个展示界面,目前看来是没什么用 使用dirb 跑一下目录,发现 http://192.168.190.136/services/index.html 访问 http://192.168.190.136/services/index.html 在网站中发现一个链接 点击进入,一个售后服务的页面 Services Information Request To provide "out of this world" service, a Sales rep will check your web

网络编程

不羁的心 提交于 2020-02-22 04:40:04
# 网络编程 2台机器之间的通信 -- 网卡 - mac地址 - 物理地址 多台机器之间的通信 -- 交换机 mac 世界唯一 ip地址 虚拟地址 随着时间/空间变化而变化 ipv4 4位点分十进制 0.0.0.0 - 255.255.255.255 ipv6 6位:分十六进制 0.0.0.0.0.0 - 255.255.255.255.255.255 127.0.0.1 本机回环地址 0.0.0.0 本机所有的ip 包括127.0.0.1/实际ip 交换机的工作方式: 单播/广播/组播 arp协议 通过ip找mac 交换机:广播 将要找的机器的信息发给局域网内的所有机器 交换机-->单播 返回要找机器的那台机器 公网 ip: 不管在哪都能找见的ip地址 内网 ip: 校园网,公司内网,员工网 保留字段: 专门给内网使用,公网ip永远不会占用内网ip的地址 192.168.0.1 - 192.168.255.255 172.168.0.1 - 172.168.255.255 10.0.0.1 - 10.255.255.255 局域网与局域网之间的机器通信 你要找的两台机器之间的网络是通的 机器a -->机器b 机器a -->交换机 -(网关ip)-> 路由器 -...-> 路由器 -(网关ip)-> 交换机 --> 机器b 我怎么知道机器a和机器b不是一个网段的? 子网掩码

Linux—网络编程(day12)

强颜欢笑 提交于 2020-02-22 03:29:42
一、网络基础知识 二、基于TCP的网络编程 二、基于TCP的网络编程 1、编程中用到的辅助函数 (1)主机字节序和网络字节序的转换   因为数据存储方式涉及大端和小端,不同方式通信时需要转换,网络字节序为大端;可以使用以下函数:   #include<arpa.inet.h>   uint32_t htonl(uint_32_t hostlong);   uint16_t htons(uint_16_t hostshort);   uint32_t ntohl(uint_32_t netlong);   uint16_t nonhs(uint_16_t hostshort);   其中:h代表host,n代表net,l代表long,s代表short (2)具体的网络协议地址空间和通用的网络地址空间的转换。   具体的网络协议族有ipv4,ipv6,local,unix等,各自有各自的地址空间,通用地址空间的类型为 struct sockaddr类型,在bind,accept等函数中都要用此类型做参数,可使用以下函数做转换:    inet_pton(3)   int inet_pton(int af, const char *src, void *dst); 功能:   转换src(点分十进制的地址格式)指定的字符串为网络地址结构到af指定的网络地址家族(即text to

pythonnet-网络编程(1)

谁说我不能喝 提交于 2020-02-22 03:27:55
python的网络编程有不少难点,也容易忘记,最近我会陆续发出系统、完整pythonnet知识的博客,一边复习一边分享,感兴趣的可以关注我。 话不多说,开始吧。 网络编程 目的:数据的传输 ISO(国际标准化组织) OSI七层模型----->网络通信的标准化流程 应用层:提供用户服务,具体的内容由特定的程序规定 表示层:提供数据的加密和压缩优化 会话层:确定建立应用链接,选择传输服务 传输层:提供数据传输服务,进行流量控制 网络层:路由选择,网络互联 链路层:提供链路交换,具体消息的发送 物理层:物理硬件,接口,网卡的规定 可划分为四层模型 四层模型 应用层 传输层 网络层 物理链路层 划分为五层模型(TCP/IP模型) 应用层(应用层 表示层 会话层) 传输层 网络层 链路层 物理层 OSI模型的优点:将功能分开,降低网络传输中的耦合度,使开发流程更加清晰, 每部分各司其职。 高聚合:每个模块功能尽量单一,不会多个功能掺杂 低耦合:尽量降低每个模块之间的关联性 网络协议:在网络通信中协议各方必需遵守的规定。如建立什么连接,消息结构如何解析等。 应用层:TFTP HTTP DNS SMTP 传输层:TCP  UDP 网络层:IP 物理层:IEEE 网络相关概念 网络主机:在网络上确定一台主机 本地使用:“localhost”  127.0.0.1 网络地址:"0.0.0.0"   

TCP/IP、Http、Socket的区别

怎甘沉沦 提交于 2020-02-22 03:22:46
 网络由下往上分为   物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。   通过初步的了解,我知道IP协议对应于网络层,TCP协议对应于传输层,而HTTP协议对应于应用层,   三者从本质上来说没有可比性,   socket则是对TCP/IP协议的封装和应用(程序员层面上)。   也可以说,TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,   而HTTP是应用层协议,主要解决如何包装数据。   关于TCP/IP和HTTP协议的关系,网络有一段比较容易理解的介绍:   “我们在传输数据时,可以只使用(传输层)TCP/IP协议,但是那样的话,如果没有应用层,便无法识别数据内容。   如果想要使传输的数据有意义,则必须使用到应用层协议。   应用层协议有很多,比如HTTP、FTP、TELNET等,也可以自己定义应用层协议。   WEB使用HTTP协议作应用层协议,以封装HTTP文本信息,然后使用TCP/IP做传输层协议将它发到网络上。”   而我们平时说的最多的socket是什么呢,实际上socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API)。   通过Socket,我们才能使用TCP/IP协议。   实际上,Socket跟TCP/IP协议没有必然的联系。   Socket编程接口在设计的时候,就希望也能适应其他的网络协议

C# Socket 入门4 UPD 发送结构体

一曲冷凌霜 提交于 2020-02-21 19:41:38
今天我们来学 socket 发送结构体 1. 先看要发送的结构体 代码 using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServices; namespace Lin.p2p.Mo { /// <summary> /// 通信消息格式 /// </summary> [Serializable] [StructLayout(LayoutKind.Sequential, Pack = 1 )] public struct CP2PMessage { public sbyte nMessageTypes; public int Value; } } 2. 请看服务端 代码 using System; using System.Collections.Generic; using System.Text; using System.Net.Sockets; using System.Net; using Lin.p2p; using Lin.p2p.Mo; namespace ConsoleApplication1 { class Program { static void Main( string [] args) { // 1.创建套节字

C# Socket 入门3 UPD

喜欢而已 提交于 2020-02-21 19:40:48
今天来写一个UPD 1.服务端: 代码 using System; using System.Collections.Generic; using System.Text; using System.Net.Sockets; using System.Net; namespace ConsoleApplication1 { class Program { static void Main( string [] args) { // 1.创建套节字 Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); // 2.填充IP IPEndPoint ipe = new IPEndPoint(IPAddress.Any, 4321 ); // 3.绑定 socket.Bind(ipe); // 等待客户机连接 Console.WriteLine( " This is a Server, host name is {0} " , Dns.GetHostName()); Console.WriteLine( " Waiting for a client... " ); // 4.得客户机IP IPEndPoint sender = new IPEndPoint