Linux & 网络编程
文章平均质量分 74
n5
在信息时代客观障碍已不复存在所谓障碍都是主观上的如果你想研发什么新的技术你不需要几百万美元的资金你只需要在冰箱里放满比萨和可乐再有一台便宜的计算机和与之献身的决心你即可拥有任何你想拥有的编程境界- John Carmack
展开
-
WSL启动时自动启动docker服务
在Windows Subsystem for Linux 2 (WSL 2)中,可以通过修改WSL 2的启动配置,使得WSL启动时自动启动Docker服务。Windows系统的WSL,当windows关机再开机后,WSL等于是重新开机的,默认情况下,不会启动Docker服务。这段代码会在每次启动WSL 2时检查Docker服务是否已经运行,如果没有运行,则会自动启动Docker。关闭当前的WSL终端窗口,然后重新打开一个新的WSL终端窗口。请确保你拥有足够的权限来修改WSL的配置和启动Docker服务。原创 2023-10-31 17:05:11 · 1871 阅读 · 0 评论 -
使用密钥访问远程主机
从某些云服务商处购买的主机,一般会给你root密码访问,如果在自己的电脑上经常要登录,每次都输入密码不是很方便。其实可以使用密钥访问。原创 2023-10-31 16:58:34 · 319 阅读 · 0 评论 -
docker私有注册表创建和使用
本文给出了一个具体的使用docker registry和nginx配置docker私有注册表的方案。原创 2023-06-28 19:33:49 · 1065 阅读 · 0 评论 -
aws EC2实例私钥丢失解决方法
网上搜有很多种方法,我自己试了一个好使的记录一下,这个方法比较简单。原理就是使用clound init脚本创建一个具有管理员权限的新用户,并设置新的公钥。这样就可以使用这个新用户的私钥登录实例了。原创 2023-05-31 19:49:05 · 531 阅读 · 0 评论 -
Linux ~/.ssh目录详解和密钥对使用
Linux中,用于根目录下有一个.ssh目录,保存了ssh相关的key和一些记录文件。原创 2023-05-31 11:36:23 · 13461 阅读 · 2 评论 -
Ubuntu 22.04 安装到RAID1
弄一台Ubuntu内网服务器,要跑一些服务,为了可用性,准备组RAID1。原创 2023-05-30 18:36:21 · 5269 阅读 · 4 评论 -
linux c开发: 处理命令行参数
在Linux c语言开发时,可使用getopt_long获取命令行参数,这个方法同时支持短选项和长选项,比较方便。(因为选项可以带参数,为了不和命令行参数混淆,这里命令行参数称为选项) 边看代码,边做分析:#include <stdio.h>#include <getopt.h> //需要包括此头文件// Values for long options // 长选项对应的整数值,在long原创 2017-08-17 19:23:24 · 2565 阅读 · 0 评论 -
linux c开发: 在程序退出时进行处理
有时候,希望程序退出时能进行一些处理,比如保存状态,释放一些资源。c语言开发的linux程序,有可能正常退出(exit),有可能异常crash,而异常crash可能是响应了某信号的默认处理。这里总结一下这些情况,如何获取一个统一的退出处理的点,说白了就是写一个回调函数,让他在程序正常或异常退出时调用。先看正常退出,即调用exit或者main函数return亦或最后一个线程正常退出时,如何捕获退出事原创 2017-08-28 16:40:47 · 5557 阅读 · 2 评论 -
linux c开发: 关于malloc(0)
因为有一个bug栽在malloc(0)上,所以有必要记录一下。先说结论: * malloc(0)是允许的,并且返回一个非NULL的指针,至少在我工作的linux系统上是这样的。man文档里面说: malloc() allocates size bytes and returns a pointer to the allocated memory. The memory is not cleare原创 2017-09-01 15:03:22 · 1237 阅读 · 0 评论 -
go语言的类型断言(Type Assertion)
x.(T) 检查x的动态类型是否是T,其中x必须是接口值。 * 如果T是具体类型 类型断言检查x的动态类型是否等于具体类型T。如果检查成功,类型断言返回的结果是x的动态值,其类型是T。换句话说,对接口值x断言其动态类型是具体类型T,若成功则提取出x的具体值。如果检查失败则panic。 例如:var w io.Writerw = os.Stdout //os.Stdout是一个类型为*os.原创 2017-12-14 17:31:27 · 3018 阅读 · 1 评论 -
TCP理论带宽计算
TCP理论上的有效带宽计算(即每秒可以传输多少负载数据)以千兆网为例,首先要明确千兆网的速度为1000Mbps,即每秒可传输1000M个bit,且这儿1M = 1000 K = 1000000。那么千兆网的速度就是125MB/s,即每秒传输125000000个字节。(如果按MiB计算,就是119MiB/s)在TCP/IP网络,一般使用以太网传输,在以太网中传输的是以太网帧。而TCP段是封装在IP原创 2017-12-29 20:03:12 · 6327 阅读 · 0 评论 -
使用nc & pv测试发送速度
最近写了一个用于测试网络速度的发包工具,再工具发布之前,我使用nc配合pv对工具进行了测试,即确认工具发送的数据流量和nc/pv接收到的是一致的,确认工具是按设定参数发送数据。先说一下发送数据的工具的工作原理对于TCP,参数为每次写入的数据块的大小,以及数据块的数量,比如每次写入1M,共发送1000个,这样就发送了1G的数据。工具是服务端,收到客户端的任意数据后开始发送,所以可以配合nc使用,只要原创 2017-12-29 20:04:16 · 3796 阅读 · 0 评论 -
ip分片研究-以UDP为例
原文 http://www.jianshu.com/p/741cb12ab0c9测试环境: 利用iOS的NE从TUN抓取IP packets,如下代码分析ip包: uint16_t iphid = IPH_ID(iphdr); uint16_t iphflagoff = ntohs(IPH_OFFSET(iphdr));原创 2017-03-30 16:25:36 · 3050 阅读 · 0 评论 -
[go] binary.Write 小坑一个兼论go的错误处理哲学
有如下go代码:const ( foo = 123)buffer := new(bytes.Buffer)binary.Write(buffer, binary.BigEndian, foo)fmt.Println(buffer.Len())输出结果是0,foo没有写入到buffer中。原因在于,binary包的Write内部调用了intDataSize函数获取foo的长度:原创 2018-01-23 18:16:12 · 4073 阅读 · 0 评论 -
密码技术科普
密码学家的六个工具:对称密码,公钥密码,单向散列函数,消息认证码,数字签名,伪随机数生成器。单向散列函数(也称消息摘要):单向散列函数可以实现完整性的检查,可以辨别出“篡改”,但无法辨别出“伪装”。当我们不仅需要确认消息的完整性,同时还需要确认消息是否真的来自发送者,紧靠完整性检查是不够的,还需要进行“认证”。消息的完整性(integrity),指“消息没有被篡改”这一性质,完整性...原创 2018-06-11 15:33:20 · 1350 阅读 · 1 评论 -
linux c开发: 程序崩溃时保存堆栈信息并解析具体代码行
写服务器程序最怕的是百分之一的概率崩溃了,你却不知道为啥,想重现又重现不出来。所以在崩溃时将当时的堆栈保存下来非常重要。网上有很多文章讲解怎么保存,但我使用了发现可以保存,但是没有函数名称和行号,仍然没法定位问题。在stack overflow上有人说只有动态库的代码才能显示出函数名和行号,想完整显示还需要使用某某第三方开源库,不过我幸好发现使用addr2line命令可以将文件名和行号显示出来,轻松原创 2017-08-28 17:17:51 · 9204 阅读 · 3 评论 -
(libev) cannot allocate xxx bytes, aborting 问题的一种触发条件
最近在项目中使用了libev,遇到一个很奇怪的crash,服务器运行随机时间后有一定的概率奔溃,输出的最后一行log是: (libev) cannot allocate xxx bytes, aborting。 因为捕捉了SIGINT信号,所以可以确定崩溃就是由于libev的这个abort。开始是以为内存越界之类,排查了strncpy, memset,memcpy等使用的地方,并且使用valgr原创 2017-08-01 11:15:56 · 2878 阅读 · 0 评论 -
Java Network Programming 笔记(1)
Java Network Programming 笔记n5一 网络基本概念Chapter2 Basic Network Concepts2.1 Networkskeywords: network, node, host, address, name, packet-switched, protocol网络是可以或多或少实时地相互发送和接收数据的计算机和其他设备的集合。网络上的每台机器被称作结点(n原创 2005-06-24 18:25:00 · 2520 阅读 · 1 评论 -
Java Network Programming 笔记(2)
Java Network Programming 笔记n5二 查找Internet地址Chapter 6 Looking up Internet Addressesjava.net.InetAddress类是java对IP地址的封装,这个类被其他大多数网络类使用,包括Socket,ServerSocket,URL,DatagramSocket,DatagramPacket。该类中包含hostNam原创 2005-06-24 18:28:00 · 2324 阅读 · 0 评论 -
linux, windows, mac, ios等平台GCC预编译宏判断
写跨平台c/c++程序的时候,需要搞清各平台下面的预编译宏,区分各平台代码。而跨平台c/c++编程,GCC基本在各平台都可以使用。整理了一份各平台预编译宏的判断示例。需要注意几点:* windows32/64平台_WIN32都会被定义,而_WIN64只在64位windows上定义,因此要先判断_WIN64* 所有的apple系统都会定义 __APPLE__,包括MacOSX和iOS*原创 2017-04-12 16:07:01 · 16465 阅读 · 2 评论 -
iOS编译集成linux开源c库的一些记录
最近一个iOS项目需要使用一些Linux下面的开源c库,说是Linux的其实是跨平台的,各种Unix系统都有支持。理论上iOS来自MacOS,而MacOS其实是一种兼容的Unix系统,所以这些库应该也可以在iOS上跑。当然了这些库并没有直接操作系统硬件的。目的是在iOS中使用开源c库,那么第一步得能在Linux或Mac上编译他们吧,所以需要点一点Linux 编译安装c库的技能点。 最基本的就是gc原创 2017-05-03 17:27:37 · 2252 阅读 · 1 评论 -
TCP服务器端口数,最大连接数以及MaxUserPort的关系辨真
原文连接:http://www.jianshu.com/p/4a58761d758f关于TCP服务器最大并发连接数有一种误解就是“因为端口号上限为65535,所以TCP服务器理论上的可承载的最大并发连接数也是65535”。先说结论:对于TCP服务端进程来说,他可以同时连接的客户端数量并不受限于可用端口号。并发连接数受限于linux可打开文件数,这个数是可以配置的,可以非常大,所以实际上受限于系统性能原创 2017-04-21 16:49:03 · 17768 阅读 · 0 评论 -
linux TCP Fast Open开启和测试
linux上要开启TCP Fast Open,内核版本至少为3.7.0, 且需要设置 /proc/sys/net/ipv4/tcp_fastopen 为3. 开启后,如果有连接进来,使用如下命令查看: grep ‘^TcpExt:’ /proc/net/netstat | cut -d ’ ’ -f 91-96 | column -t 例如:[root@vmxxx ~]# grep '^TcpE原创 2017-05-12 11:11:45 · 15277 阅读 · 0 评论 -
iOS TUN之避免UDP包ip分片
iOS的NetworkExtension给应用暴露了一个虚拟网卡TUN设备,可以设置其MTU值。如果上层应用发送的IP包大于这个MTU就会被分片。(详见:http://www.jianshu.com/p/741cb12ab0c9 ) * TUN转发UDP包时遇到分片的问题 使用iOS网络扩展开发时,往往需要在TUN中处理数据包,进行处理后重新发送出去。由于通过TUN拿到的是ip包,如果要进行ud原创 2017-06-09 20:01:56 · 3156 阅读 · 0 评论 -
Java Network Programming 笔记(3)
Java Network Programming 笔记n5三 利用URL类获取数据chapter 7 Retrieving Data with URLs1 建立URL对象当JVM不支持url的协议时抛出MalformedURLException(1)public URL(String url) throws MalformedURLException(2)public URL(String pro原创 2005-06-24 18:31:00 · 2301 阅读 · 0 评论