笔者一直觉得如果能知道从应用到框架再到操作系统的每一处代码,是一件Exciting的事情。 今天笔者就来从Linux源码的角度看下Server端的Socket在进行bind的时候到底做了哪些事情(基于Linux 3.10内核)。
本人有幸参加了一些线下的攻防演练,比较熟悉攻防对抗的流程和手法,和很多师傅们在线下也有过深入学习交流,同时也产生了一些自己的想法。
大家可能也在 nginx、redis 等 server 的配置文件中见过 bind 的时候不用真实的 IP,而使用 0.0.0.0 的情况。
去年 techday 上有幸邀请到了 Go 夜读的大佬杨文,他跟我们分享了开源的主题,深受鼓舞。正好前段时间测试 Kotlin 的官方库 ktor 发现了一个很冷门的问题,于是提了一个 PR。经过了一个月漫长的等待,终于有人 review 并 merge 到 master 分支了,估计下个 release 就可以看到了。
SelectorProvider提供的所有provider都是同一个对象。如果没有,它会通过AccessController.doPrivileged来给获取provider的代码最高的权限,执行逻辑是:
RPM包详解 rpm命令执行安装rpm包和源码包,rpm包以.rpm结尾,而源码包以.src.rpm结尾 RPM软件包命令规则 name-version-arch.rpm name-version-arch.src.rpm 示例:bind-9.8.2-0.47.rc1.el6.x86_64.rpm 示例解析: 1.name,如:bind,是软件的名称 2.version,如:9.8.2-0,是软件的版本号,版本号格式通常为“主版本号.次版本号.修正号”。47,是发布版本号,表示这个rpm软件包是第几次编译生成的 3.arch,如i386,是表示包适用的硬件平台,目前rpm支持的平台有:i386,i586,i686,sparc和alpha 4..rpm和.src.rpm,是rpm包类型后缀,rpm是编译好的二进制包,.src.rpm是源码包 5.特殊名称: (1)el*:表示发行商的版本,el6表示这个软件包是在rhel6.x/centos6.x下使用; (2)devel:表示这个rpm包是软件的开发包 (3)noarch:说明这样的软件包可以在任何平台安装和运行,不需要特定的硬件平台 RPM常用命令 -ivh 安装并显示安装进度(规则:rpm –ivh 包名) 示例:rpm –ivh bind-9.8.2-0.47.rc1.el6.x86_64.rpm
安装的服务器是基于debian8.6.0环境使用源码进行安装的,安装的bind版本为bind9.10.6。安装步骤如下:
开篇我先考大家一个小问题,如果你的服务器上已经有个进程在 listen 6000 这个端口号了。那么该服务器上其它进程是否还能 bind 和 listen 该端口呢?
好多使用ldap认证的软件都是Python的,比如superset和airflow, 好吧,他们都是airbnb家的。在配置ldap的时候可能会出现认证失败,你不知道是因为什么导致配置失败的。所以,就要 跟踪源码,看看内部怎么认证实现的。
关于GShell GShell是一款功能强大且支持灵活扩展的跨平台Shell生成器,在该工具的帮助下,广大研究人员可以随意生成针对任意平台的任何Shell,并实现完全的自动化和管理控制功能。 支持的操作系统 类Unix系统 GNU/Linux Windows macOS 支持生成的Shell Bind-Shel:目标需要有一个监听端口,然后我们连接到目标主机; 反向Shell:我们又一个监听端口,让目标连接到我们的设备; 支持的编码 URL编码:绕过URL过滤器; Base64/32/16编
在我的上一篇笔记中,介绍了redis的一些基本概念。在本文,我们将来安装 redis 的学习环境。我们将在Linux环境中安装redis服务,如果你现在没有Linux环境,可以通过这个链接参考Linux虚拟机环境的搭建方法:使用Multipass快速创建和管理Ubuntu Server虚拟机 。
外部存储作为开发中经常接触的一个重要系统组成,在Android历代版本中,有过许许多多重要的变更。我也曾疑惑过,为什么一个简简单单外部存储,会存在存在这么多奇奇怪怪的路径:/sdcard、/mnt/sdacrd、/storage/extSdCard、/mnt/shell/emulated/0、/storage/emulated/0、/mnt/shell/runtime/default/emulated/0...其实,这背后代表了一项项技术的成熟与发布:模拟外部存储、多用户、运行时权限...
本文介绍网络IO编程的入门部分,Java 的传统BIO Socket编程源码分析,了解如何将BIO阻塞行为accept() 和 read() 改造为非阻塞行为,并且将结合Linux文档介绍其中的机制,文档中描述了如何处理Socket的accept,对比Java的Socket实现代码,基本可以发现和Linux行为基本一致。
我们知道,在Unix/Linux系统中“一切皆文件”,socket也被认为是一种文件,socket被表示成文件描述符。
在大小型项目开发中,redis已经成为项目架构不可缺少的一部分,作为程序员来说,不只是要会用redis,也需要会部署redis,虽说大部分互联网公司这些部署工作都是由运维来完成的,但是作为开发人员来说,在开发项目的过程中,可能会遇到不可预测的问题,问题可能出现在代码层面,但有些问题也会出现在部署配置方面,如果开发人员连部署都不会,要是出现问题了,要是无法解决岂不是要被炒鱿鱼啦~哈哈哈,不说多了,咋们部署redis走起!
这些问题虽然在线上经常看到,但我们似乎很少去深究。如果真的能透彻地把这些问题理解到位,我们对性能的掌控能力将会变得更强。
这位读者的角度是以为服务端没有调用 listen,客户端会 ping 不通服务器,很明显,搞错了。
展示本地项目给朋友、小程序开发时会用到的工具 是一个将局域网个人电脑、服务器代理到公网的内网穿透工具,支持tcp流量转发,可支持任何tcp上层协议(访问内网网站、本地支付接口调试、ssh访问、远程桌面...) 中文文档 git地址 # 使用 获取发布包 拉取源码,运行 mvn package,打包后的资源放在distribution目录中,包括client和server 直接下载发布包 https://github.com/ffay/lanproxy/releases # 配置 server c
外部存储作为开发中经常接触的一个重要系统组成,在Android历代版本中,有过许许多多重要的变更。我也曾疑惑过,为什么一个简简单单外部存储,会存在存在这么多奇奇怪怪的路...
可能出现的错误:fatal error: jemalloc/jemalloc.h: No such file or directory
第一次听到的这个名词的时候觉得很是有趣,不知道是个什么意思,总觉得又是奇怪的中文翻译导致的。
本文介绍了如何在Windows操作系统上通过浏览器来远程访问Linux服务器上的Jupyter Notebook,以便进行Python和Spark编程。首先介绍了安装和配置Jupyter Notebook和Spark的必要步骤,然后阐述了如何在浏览器中访问Linux服务器上的Jupyter Notebook。
DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP协议之上,使用端口号53。 DNS 的分布式数据库是以域名为索引的,每个域名实际上就是一棵很大的逆向树中路径,这棵逆向树称为域名空间(domain name space)。如图所示树的最大深度不得超过127 层,树中每个节点都有一个可以长达63 个字符的文本标号。
Grok-backdoor是一款支持Ngrok隧道的强大Python后门工具,该工具基于Python开发,使用了Ngrok隧道来实现C&C通信。值得一提的是,当前版本的Grok-backdoor支持使用Pyinstaller生成Windows、Linux和Mac后门源码。
代码 #include <iostream> #include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #include <arpa/inet.h> #include <sys/socket.h> #include <netinet/in.h> using namespace std; int main() { int client; /* * socket函数的方法签名
本文主要内容是介绍移动端优化会涉及到的绑定cpu(cpu affinity)[2,3]的概念和相关验证实验。
一. 官网下载对应版本的redis 二. 拷贝至linux服务器并解压 将压缩包拷贝到/usr/local目录下 解压, 解压后重命名为redis 三. 编译安装 四. 以守护进程方式运行 五. redis访问权限配置 redis访问权限说明: 特殊说明: 1. 如果有多个同网段主机连接的需求,可以在bind参数后追加ip,多个ip之间以空格间隔. 2. 对于外网的连接需求,需要注释bind参数,并设置访问密码. 3. 以加载配置文件的方式,启动Redis 六. redis可视化工具RedisDesktop
下载地址 :https://github.com/alibaba/Nacos/releases
SyterKit 是一个纯裸机框架,用于 TinyVision 或者其他 v851se/v851s/v851s3/v853 等芯片的开发板,SyterKit 使用 CMake 作为构建系统构建,支持多种应用与多种外设驱动。同时 SyterKit 也具有启动引导的功能,可以替代 U-Boot 实现快速启动
准备环境 1.0 优先部署Mongodb wget http://labs-1253675457.cosgz.myqcloud.com/mongodb-linux-x86_64-3.0.1.tgz tar -xzvf mongodb-linux-x86_64-3.0.1.tgz mv mongodb-linux-x86_64-3.0.1/ /usr/local/mongodb 1.1 创建数据存储目录 mkdir /usr/local/mongodb/data 1.2 配置环境变量 echo "expor
前面学习了 Linux 的 IO 多路复用 select/poll/epoll 的实现原理,最近学习了下 Go 语言的 netpoll 网络轮询器,在学习的过程中,产生了下面这些疑问,相信对这块内容有所了解的同学都会比较关心:
如果我们写的是图形界面程序,可能会打包成相应操作系统平台的二进制运行文件(当然也可能直接发 Python 代码给别人运行)。
项目中经常需要用到Redis做缓存数据库,可是还有小伙伴不会在Linux上安装Redis,毕竟我们开发的项目都是要在服务器上运行的,今天就来讲讲如何在CentOS7环境使用源码进行安装Redis。
BIO, NIO, AIO,本身的描述都是在Java语言的基础上的。 而描述IO,我们需要从三个层面:
mogodb3.2源码安装 下载链接: http://www.mongodb.org/downloads 1、环境准备: 1.mkdir -p /data/tgz #创建存放软件的目录 2.mkdir -p /data/apps/mongodb #创建MongoDB程序存放目录 3.mkdir -p /data/data/mongodb #创建数据存放目录 4.mkdir -p /data/log/mongodb #创建日志存放目录 2、下载,解压: cd /data/tgz wget https://fa
更多奇技淫巧欢迎订阅博客:https://fuckcloudnative.io 前言 该系列文章总共分为三篇: ?Linux Capabilities 入门教程:概念篇 ?Linux Capabili
React PowerPlug 是利用 render props 进行更好状态管理的工具库。
在windows下安装的python是带tab键自动补齐的而Linux自带的python版本过久,从新安装后没有tab键补齐功能,而且在交互模式下不小心打错了很麻烦。
编译安装具有高度可定制性,非常适用于有特殊需求的场合。这里我们将以Centos 6为例,编译安装bind程序包 并从零构建DNS服务器
| 导语 外部存储作为开发中经常接触的一个重要系统组成,在Android历代版本中,有过许许多多重要的变更。我也曾疑惑过,为什么一个简简单单外部存储,会存在存在这么多奇奇怪怪的路径:/sdcard、/mnt/sdacrd、/storage/extSdCard、/mnt/shell/emulated/0、/storage/emulated/0、/mnt/shell/runtime/default/emulated/0…其实,这背后代表了一项项技术的成熟与发布:模拟外部存储、多用户、运行时权限… 一、各版本外部
本章来写一个插件,插件功能为通过NETLINK读取linux系统中的hotplug信息,比如usb、SD卡、磁盘等设备的插拔事件产生的信息,将读到的信息通过插件间通信的方式发出。
但是,它们大多是商业化软件,价格昂贵;即使有提供免费版本,也是各种限制,稳定性和安全性也没法得到保证
在2016年12月份至2017年1月份Red hat CVE漏洞库发布了4个“重要”“严重”等级的安全漏洞,针对出现的安全漏洞,发布了对应的Bugzilla。安全公告每月更新一次,旨在查找解决严重的漏洞问题。
前言:SO_REUSEPORT是提高服务器性能的一个特性,从Linux3.9后支持,本文从内核5.9.9的源码分析SO_REUSEPORT的实现,因为内核源码非常复杂,尽量把自己的思路说一下。大家有兴趣的可以自己研究。
学习 不能着急,要按照一定的方法和建议慢慢来 , 每个人 都有一套适合自己的方法,Linux的概念,版本,命令,功能,软件,用途,等等这些都是很好的切入点, 学习Linux分为几个层次,个人觉得 庖丁解牛差不多 。 学习Linux 就是把它的知识点、难点全部罗列出来,一个一个的由浅入深的分析,学习,掌握。
今天我们解读 methods 的源码,其实 methods 挺简单的,所以就不打算出白话版了,但是 methods 里面让我重新认识到这一个重要的知识点,是我是我,可能你们已经掌握了哈哈
笔者一直觉得如果能知道从应用到框架再到操作系统的每一处代码,是一件Exciting的事情。 今天笔者就从Linux源码的角度看下Server端的Socket在进行Accept的时候到底做了哪些事情(基于Linux 3.10内核)。
领取专属 10元无门槛券
手把手带您无忧上云