1.go-iptables功能与源码详解
2.UE4-Slate源码学习(一)slate初探
3.华为自研编程语言“仓颉”火上热搜,源码狗英文编程还香吗?
4.dfinty是源码狗什么币
go-iptables功能与源码详解
介绍iptables之前我们先搬出他的父亲netfilter,netfilter是源码狗基于 Linux 2.4.x或更新的内核,提供了一系列报文处理的源码狗能力(过滤+改包+连接跟踪),具体来讲可以包含以下几个功能:
其实说白了,源码狗netfilter就是源码狗查重论文源码操作系统实现了网络防火墙的能力(连接跟踪+过滤+改包),而iptables就是源码狗用户态操作内核中防火墙能力的命令行工具,位于用户空间。源码狗快问快答,源码狗为啥计算机系统需要内核态和用户态(狗头)。源码狗
既然netfilter是源码狗对报文进行处理,那么我们就应该先了解一下内核是源码狗如何进行收发包的,发生报文大致流程如下:
netfilter框架就是源码狗作用于网络层中,在一些关键的源码狗报文收发处理路径上,加一些hook点,源码狗可以认为是一个个检查点,有的在主机外报文进入的位置(PREROUTING ),有的在经过路由发觉要进入本机用户态处理之前(INPUT ),有的在用户态处理完成后发出的地方(OUTPUT ),有的在报文经过路由并且发觉不是本机决定转发走的位置(FOWARD ),有的在路由转发之后出口的位置(POSTROUTING ),每个检查点有不同的规则集合,这些规则会有一定的优先级顺序,如果报文达到匹配条件(五元组之类的)且优先级最高的规则(序号越小优先级越高),内核会执行规则对应的动作,比如说拒绝,放行,记录日志,丢弃。
最后总结如下图所示,安卓音乐播放器源码里面包含了netfilter框架中,报文在网络层先后经过的一些hook点:
报文转发视角:
iptables命令行工具管理视角:
规则种类:
流入本机路径:
经过本机路径:
流出本机路径:
由上一章节我们已经知道了iptables是用户态的命令行工具,目的就是为了方便我们在各个检查点增删改查不同种类的规则,命令的格式大致如下,简单理解就是针对具体的哪些流(五元组+某些特定协议还会有更细分的匹配条件,比如说只针对tcp syn报文)进行怎样的动作(端口ip转换或者阻拦放行):
2.1 最基本的增删改查
增删改查的命令,我们以最常用的filter规则为例,就是最基本的防火墙过滤功能,实验环境我先准备了一个centos7的docker跑起来(docker好啊,实验完了直接删掉,不伤害本机),并通过iptables配置一些命令,然后通过主机向该docker发生ping包,测试增删改查的filter规则是否生效。
1.查询
如果有规则会把他的序号显示出来,后面插入或者删除可以用 iptables -nvL -t filter --line
可以看出filter规则可以挂载在INPUT,FORWARD,OUTPUT检查点上,并且兜底的规则都是ACCEPT,也就是没有匹配到其他规则就全部放行,这个兜底规则是可以修改的。 我们通过ifconfig查看出docker的ip,然后主机去ping一波:
然后再去查一下,会发现 packets, bytes ---> 对应规则匹配到的报文的个数/字节数:
2. 新增+删除 新增一条拒绝的报文,我们直接把docker0网关ip给禁了,这样就无法通过主机ping通docker容器了(如果有疑问,下面有解答,会涉及docker的一些小姿势): iptables -I INPUT -s ..0.1 -j DROP (-I不指定序号的话就是头插) iptables -t filter -D INPUT 1
可见已经生效了,拦截了ping包,二手车网站源码随后我删除了这条规则,又能够ping通了
3. 修改 通过-R可以进行规则修改,但能修改的部分比较少,只能改action,所以我的建议是先通过编号删除规则,再在原编号位置添加一条规则。
4. 持久化 当我们对规则进行了修改以后,如果想要修改永久生效,必须使用service iptables save保存规则,当然,如果你误操作了规则,但是并没有保存,那么使用service iptables restart命令重启iptables以后,规则会再次回到上次保存/etc/sysconfig/iptables文件时的模样。
再使用service iptables save命令保存iptables规则
5. 自定义链 我们可以创建自己的规则集,这样统一管理会非常方便,比如说,我现在要创建一系列的web服务相关的规则集,但我查询一波INPUT链一看,妈哎,条规则,这条规则有针对mail服务的,有针对sshd服务的,有针对私网IP的,有针对公网IP的,我这看一遍下来头都大了,所以就产生了一个非常合理的需求,就是我能不能创建自己的规则集,然后让这些检查点引用,在线网校源码答案是可以的: iptables -t filter -N MY_WEB
iptables -t filter -I INPUT -p tcp --dport -j MY_WEB
这就相当于tcp目的端口的报文会被送入到MY_WEB规则集中进行匹配了,后面有陆续新规则进行增删时,完全可以只针对MY_WEB进行维护。 还有不少命令,详见这位大佬的总结:
回过头来,讲一个关于docker的小知识点,就是容器和如何通过主机通讯的?
这就是veth-pair技术,一端连接彼此,一端连接协议栈,evth—pair 充当一个桥梁,连接各种虚拟网络设备的。
我们在容器内和主机敲一下ifconfig:
看到了吧,容器内的eth0和主机的vetha9就是成对出现的,然后各个主机的虚拟网卡通过docker0互联,也实现了容器间的通信,大致如下:
我们抓个包看一哈:
可以看出都是通过docker0网关转发的:
最后引用一波 朱老板总结的常用套路,作为本章结尾:
1、规则的顺序非常重要。
如果报文已经被前面的规则匹配到,IPTABLES则会对报文执行对应的动作,通常是ACCEPT或者REJECT,报文被放行或拒绝以后,即使后面的规则也能匹配到刚才放行或拒绝的报文,也没有机会再对报文执行相应的动作了(前面规则的动作为LOG时除外),所以,针对相同服务的规则,更严格的规则应该放在前面。
2、当规则中有多个匹配条件时,微信直播源码条件之间默认存在“与”的关系。
如果一条规则中包含了多个匹配条件,那么报文必须同时满足这个规则中的所有匹配条件,报文才能被这条规则匹配到。
3、在不考虑1的情况下,应该将更容易被匹配到的规则放置在前面。
4、当IPTABLES所在主机作为网络防火墙时,在配置规则时,应着重考虑方向性,双向都要考虑,从外到内,从内到外。
5、在配置IPTABLES白名单时,往往会将链的默认策略设置为ACCEPT,通过在链的最后设置REJECT规则实现白名单机制,而不是将链的默认策略设置为DROP,如果将链的默认策略设置为DROP,当链中的规则被清空时,管理员的请求也将会被DROP掉。
3. go-iptables安装
go-iptables是组件库,直接一波import " github.com/coreos/go-ip...",然后go mod tidy一番,就准备兴致冲冲的跑一波自带的测试用例集,没想到上来就是4个error:
这还了得,我直接去go-iptables的仓库issue上瞅瞅有没有同道中人,果然发现一个类似问题:
虽然都是test failures,但是错的原因是不一样的,但是看他的版本是1.8的,所以我怀疑是我的iptables的版本太老了,一个iptables -v看一眼:
直接用yum update好像不能升级,yum search也没看到最新版本,看来只能下载iptables源码自己编译了,一套连招先打出来:
不出意外的话,那就得出点意外了:
那就继续下载源码安装吧,然后发现libmnl 又依赖libnftnl ,所以直接一波大招,netfilter全家桶全安装:
Finally,再跑一次测试用例就成功了,下面就可以愉快的阅读源码了:
4. 如何使用go-iptables
5. go-iptables源码分析
关键结构体IPTables
初始化函数func New(opts ...option) (*IPTables, error) ,流程如下:
几个重要函数的实现:
其他好像也米有什么,这里面就主要介绍一下,他的命令行执行是怎么实现的:
6. Reference
UE4-Slate源码学习(一)slate初探
什么是Slate,它与UMG有何不同?
把这个问题交给AI吧。/手动狗头
Slate的创建是通过FGenericApplicationMessageHandler完成的。
FSlateApplication实现了此接口,并定义了处理硬件输入和输出的接口,用于与用户交互。在实现中,大部分函数都是虚函数,由FSlateApplication负责重写。这样,在不同的平台上,可以通过此接口调用到Slate中的事件触发。
华为自研编程语言“仓颉”火上热搜,英文编程还香吗?
华为自研编程语言“仓颉”火上热搜,英文编程还香吗?下面就我们来针对这个问题进行一番探讨,希望这些内容能够帮到有需要的朋友们。备受关注的华为自研编程语言「仓颉」,又火上热搜榜了。华为自研编程语言「仓颉」火上热搜榜,内测组员辟谣:并不是中文编程。此次是由于「仓颉」宣布启动了内测,现阶段己经有一部分开发人员取得源码。不久前,华为编程语言实验室公布了一份“新语言表达使用报考-”问卷调查,宣布征选一小批开发人员对「仓颉」编程语言开展小范畴检测。
从问卷调查内容看来,开发人员们必须填好Gitee首页、岗位和企业等信息内容,随后等候电子邮件通告。如今,伴随着大量关键点被表露出去,以前针对「仓颉」猜想的一些传闻,也拥有清晰的回答。英文名字Cangjie,并不是中文编程。
实际上,早在上年月,华为官方网就确立表露过“将公布自研洪蒙编程语言”。对于此事,华为消费者业务软件部首席总裁龚体表明,它将“为洪蒙绿色生态基础建设补上最终一环”。与此同时,华为也早已注册申请了“华为仓颉”、“仓颉语言表达”等商标logo,归类包含仪器设备、设计方案科学研究等,而一部分“仓颉”商标logo则仍在商标驳回复审、申请注册的环节。
这儿见到华为还申请注册了一个叫“仓杰”的商标logo,现阶段也早已根据申请办理,伴随着内测的打开,一部分开发人员在取得「仓颉」的源码后,也对先前满天飞的揣测和传闻开展了一些回复。其一,「仓颉」的英文名字便是Cangjie,而不是先前传言的“char”。那时候华为被曝产品研发「仓颉」后,知乎问答就发出过这门编程语言英文名字是“char”的信息:现阶段这一传言早已被辟谣。
其二,「仓颉」并不是中文编程,也不会有所说的“套壳”。据知乎问答一位匿名用户表明,感受后发觉「仓颉」编程语言“跟汉语一点儿关联没有”,英语的语法相近go+java。实际上,如今顺手一搜或是能找到一大堆有关「仓颉」是中文编程的谣言。
其三,往往仍在内测,是由于包含精英团队和内测组员都仍在改善编码。嗯,问便是仍在修bug(手动狗头)。但实际上,大伙儿最惊讶的或是「仓颉」这门编程语言到底长啥样。实际上,先前华为编程语言实验室负责人、南京大学冯新宇专家教授,早已设立过一门有关《编程语言的设计和实现》的课程内容,现阶段华为官方网已释放B站短视频。
在专题讲座一开始,冯专家教授就表露了自身现阶段开展的一些工作中。从总体上,学术研究上的分析主要包含PL基础理论及运用等,而工业生产层面的科学研究,则主要是领着华为编程语言实验室开展工业生产编程语言的设计方案和完成。
在冯新宇专家教授得出的教学课件中可以看到,现阶段的编程语言种类关键可以分成下列几类,在其中重点提及了服务平台型语言表达:像C#、Go、Swift这种开源系统编程语言,也全是由像Google、微软和iPhone那样的企业自身资金投入去做的,为此操控语言表达的工艺演变对策和方位。但华为「仓颉」到底是一门如何的语言表达,现阶段也有待官方网宣布公布信息内容。
dfinty是什么币
Definity是DOGE币。 Definity是基于区块链技术的一种加密货币,也被称为DOGE币。以下是关于DOGE币的详细解释: DOGE币简介 DOGE币是一种数字货币,全称是Dogecoin。与其他加密货币相似,DOGE币基于区块链技术,提供了一种去中心化的交易方式。它以狗头作为标志,寓意着趣味性和友好性,吸引了大量用户和投资者的关注。 DOGE币的特点 DOGE币的特点包括较低的交易成本、快速的交易确认以及广泛的接受度。由于其开放源代码和去中心化的特性,DOGE币提供了一种全球性的、无国界限制的支付方式。此外,由于其社区支持和活跃度的增长,越来越多的商家开始接受DOGE币作为支付方式。 DOGE币的应用场景 作为一种加密货币,DOGE币可以用于各种在线和实体商品的购买。由于其友好的社区氛围和广泛的用户基础,DOGE币也常用于支持各种慈善事业和社区项目。此外,由于其快速交易确认和低交易成本,它也被用于国际汇款和其他金融交易场景。 总而言之,Definity即DOGE币,是一种基于区块链技术的加密货币。它具有较低的交易成本、快速的交易确认和广泛的接受度等特点,并日益成为重要的全球支付方式之一。