软硬件使用

[转]如何干掉一条tcp 连接(活跃/非活跃)

原文来自:https://developer.aliyun.com/article/59308,之前遇到了同样的问题,在实现RTMP服务器时由于没有设置SO_RCVTIMEO,导致在RTMP握手消息交换阶段无限等待握手数据包,出现了非活跃状态的tcp连接占用情况,试过原版tcpkill,由于非活跃状态,无法强行断开连接,所幸找到了这个修改版,试了下成功踢掉了捣乱连接,特此分享,感谢原作者!

背景

最近在测试环境部署服务的时候老是会有端口被占用情况用netstat/ss 查看后发现端口一直被占用
同另外一个ip 建立了tcp 连接,类似于这样:

ESTAB      0      0      192.168.103.169:12345              192.168.103.12:10261 

当然这个问题也不是最近才遇到,之前也遇到过,不过之前都是很快这个连接就自动消失,我就可以欢快
的使用我自己喜欢的12345 端口,无奈这次一直连续好几天这个连接一直存在导致我一直无法使用这个端口。

解决过程

1. google 找答案

google 果然告诉我答案,有个叫tcpkill 的工具(可以自行搜索一下),看到之后立即将源码下下来
编译了一把,按照提示将几个确实的包安装后编译成功,然后按照tcpkill 的帮助文档进行操作

tcpkill -i eth0 src port 12345 and dst port 10261 and src host 192.168.103.169 dst host 192.168.103.12
# 按照libpcap 规则描述出一个tcp 连接

执行上述命令后发现tcpkill 感觉像是处于hang 住状态,运行了半天也没见把这个连接干掉,为什么这个连接没干掉? 于是用 nc 测试了下,发现如下情况

对于nc 已经建立的连接运行tcpkill 后无法立即干掉,只有在这个连接上有数据传输的时候才会把发送rst 包将连接reset 掉。
Continue reading…

VS2019 16.9版引入的linux项目远程输出路径bug

这是一个Visual Studio 2019(博主发现时的版本是Community 16.9.4)的bug,之前在16.8版本的时候是没有问题的,并且影响的是VS原生的远程linux项目,Make CMake项目不受影响,发现这个问题时着实郁闷了一段时间,总结一句话就是这个选项:

红框内的两个dir,在16.9以前可以同时作用于本地windows项目路径,及同步到远端linux的项目路径,而到了16.9的时候无论怎么修改这两个路径都只有windows侧的路径会响应变化,而sync到linux的路径还会使用默认的这个路径(应该是bug或其它原因,比如,写死了?!),查了半天也没找到解决方法,对简单项目的话只好修改项目设置,都是用默认dir,或者想办法退回16.8版本,其中搜索过程中发现了有人提到这个问题:https://developercommunity.visualstudio.com/t/VS-For-Linux:-Output-files-on-remote-mac/1357691,其中提到已经修改等待发布,在此记录这个影响挺大的问题,后续有更新会同步过来…

UPDATE1: 16.10版本中已修改这个问题,加入了独立控制远端生成路径的选项。

解决UE4在中文环境下Compile错误提示乱码问题

UE4 4.26.0,VS 2019 Community,中文Win10 20H2组合在一起出现了今天要讲的问题,Compile出错时的log信息中中文乱码

试过切换VS语言为英文,UE4语言为中文,均不起作用,想起之前的这个问题:Android Studio的Build Output中文输出乱码(菱形问号)问题的解决方法,以为是不是UE4也有类似的设置,查找半天无果,最后发现其实新版Win10(最早哪个版本加上的我也不清楚)里面的区域语言设置中有个UTF-8的选项,虽然到目前用的20H2时仍声称为beta状态,但确实可以解决这个问题:

Continue reading…

VS Linux项目编译g++: fatal error: cannot specify -o with -c, -S or -E with multiple files问题

使用Visual Studio (2019)进行Linux项目开发时遇到项目编译时提示如标题所写的:

g++: fatal error: cannot specify -o with -c, -S or -E with multiple files

仔细检查了项目代码,并没有发现问题,也尝试了移除最近改动过的代码、增加过的源码文件,均不能正常编译…(同时,也确认过新建的项目可以正常编译,证明开发环境本身还是没问题的)

Continue reading…

Android Studio带C++项目提示More than one file was found with OS independent path问题修正

近日,在将一个旧Android Studio项目(带native c/c++)升级了新版本gradle 4.0.1后(Android Studio版本4.0.1),发现重新clean再构建时,提示:

More than one file was found with OS independent path ‘lib/armeabi-v7a/xxx.so’. If you are using jniLibs and CMake IMPORTED targets, see https://developer.android.com/studio/preview/features#automatic_packaging_of_prebuilt_dependencies_used_by_cmake

虽然一开始也是一脸茫然,但既然提示信息里都提供了连接了,那就看一下吧,顺带一提,给出的链接我写这篇博文的时候并不是最终信息位置,最终链接在这里:https://developer.android.com/studio/releases/gradle-plugin#cmake-imported-targets ,仔细阅读了一下,发现实际上是从gradle 4.0开始就对jni的预编译依赖引用方式做出了修改:

Continue reading…

Android Studio的Build Output中文输出乱码(菱形问号)问题的解决方法

Win10系统(Mac上貌似没问题),Android Studio版本4.x,不知为何,Build Output中的中文,包括编译器提示、以及错误代码中的中文,都会显示为如下的乱码,菱形问号:

可以猜到javac在使用中文输出各种信息,这点可以通过使用gradle命令在单独打开的命令行中执行build则可以看到正确的中文输出来验证,因此尝试过用 “-Duser.language=en” 等改变jdk locale的方式来使编译器输出英文信息,但是这样虽然可以看到编译错误,但是本身代码里的中文还是会显示成乱码

最后终于发现了问题的根源,参考这里:

Continue reading…

JetBrains IntelliJ IDEA从2018更新到2019后无法卸载的问题

Uninstall hasn’t detected folder of XXX installation…

博主的IDEA是从2018一路升上来,最近出了2020,并且还用上了JB的Toolbox,看着Manually installed有点强迫症发作,于是尝试卸载掉后用Toolbox重新安装,结果就发现了上面写到的错误提示这个坑!

参考 https://youtrack.jetbrains.com/issue/PY-35047 可行的解决方法如下:

Continue reading…

IDEA maven unresolved dep问题的一种解决方法

最近在用IntelliJ IDEA 2020时遇到一个奇怪的问题,就是maven同步通过,但是编译时就是有依赖包找不到,提示:“maven unresolved dep XXX”,尝试过各种clean,reimport maven都无法解决问题,最后发现其实是之前某次更包时wifi断了下,导致包下错了,后面就一直陷入这种僵局了…

解决方法是,到“C:\Users\XXXX\.m2\repository”中手动删除找不到的dep包,然后再重新更新maven依赖就可以了。不是什么大问题,但错误提示信息很容易造成误导。

Docker Hub自动构建时对同一个image增加多个tag的方法

最近研究GitLab的内置CI/CD功能,用到了gitlab-runner的docker executor,由于CI构建环境需求比较特殊,一时没有找到合适的image,于是决定自己做一个,网上搜索了下,找到了不需要在本地安装docker而直接在GitHub上创建包含Dockerfile的repo,然后关联Docker Hub并开启自动构建的方法,尝试了下可以可以轻松完成任务(甚至都可以完全不clone GitHub上的项目代码到本地,完全在线编辑Dockerfile就可以),虽然算是完成了目标,但后来想像其他人那样给同一个image加多个tag时,却没有在后台页面上找到直接操作的方法,Configure Automated Builds里,只能通过增加新的build rule来增加新的tag,但是这样的话即使来源分支什么配置都一样,结果image也一样,但还是build出了n个image,而不是1个image n个tag,本来以为只能安装docker命令行解决了,

Continue reading…

记录一起Caddy由于无法绑定80、443端口导致的服务启动失败事故

常规方法安装完Caddy,写好Caddyfile和systemd服务配置文件后sudo systemctl start caddy,结果发现在获取证书时失败,导致整个服务启动失败:

failed to obtain certificate: acme: Error -> One or more domains had a problem:

Mar 05 09:55:48 instance-2 caddy[1846]: [ mydomain.example.com ] [ mydomain.example.com ] acme: error presenting token: presenting with standard provider server: could not start HTTPS server for challenge -> listen tcp :443: bind: permission denied

开始以为是 setcap 的问题,但是检查过后,发现安装时的设置没问题:

getcap /usr/local/bin/caddy
/usr/local/bin/caddy = cap_net_bind_service+ep

而且直接命令行启动也没有问题,那么看来应该是systemd服务配置中的问题,一番搜索后发现了这个:Caddy won’t start – Could not start HTTP server for challenge -> listen tcp :80: bind: permission denied ,参考问题中的解决方法,修改caddy.service配置为:

Continue reading…