Articles of networking

如何使用tc和cgroup修改数据包

我正在尝试优先处理从某个进程组生成的数据包,以便首先从PC中select它们。 我的目标是通过使用cgroups和tc来做到这一点,但似乎不工作。 首先,我在ubuntu上设置cgroups如下, modprobe cls_cgroup # load this module to get net_cls mkdir /sys/fs/cgroup/net_cls # mount point mount -t cgroup net_cls -onet_cls /sys/fs/cgroup/net_cls/ mkdir /sys/fs/cgroup/net_cls/foo # new cgroup echo 0x00010001 > /sys/fs/cgroup/foo/net_cls.classid # echo in a class id echo 2348 > /sys/fs/cgroup/net_cls/foo/tasks # echo in pid of firefox tc qdisc add dev eth0 root handle […]

如何获得3g的调制解调器信号强度在C + +的Linux?

没有使用AT命令我们怎么能得到3G调制解调器的信号强度? NetworkManager的gdbus对象没有像getSignalStrength这样的方法。 networkingpipe理员正在locking设备文件以防止使用AT命令。 nm-applet能够在系统托盘中显示信号强度。 所以应该有一种方法来获得networkingpipe理员的信号强度! nmcli是nm-applet的命令行计数器部分。 我nmcli获得信号强度吗? 手册中没有提到信号强度。

在网上运行一个Qt应用程序

我正在编写一个使用Qt的应用程序,并试图将其部署为一个Web应用程序。 我希望用户能够通过Web浏览器访问我的应用程序。 我猜这是一个networking应用程序是什么? 我有什么样的select? 我从来没有想过做这样的事情,但我想学习新的东西。 编辑:如果我将我的应用程序部署在Linux服务器上,并让用户通过terminal访问/运行,该怎么办? 我认为写Web应用程序将比我原先想象的更复杂。

scapy中的sniff函数的filter不能正常工作

似乎snifffunction的filter不能正常工作。 我用下面的filter执行嗅探 a=sniff(count=1,filter="tcp and host 192.168.10.55 and port 14010") 但有一段时间, sniff捕获这样的UDP数据包: >>> a=sniff(count=1,filter="tcp and host 192.168.10.55 and port 14010") >>> a <Sniffed: TCP:0 UDP:1 ICMP:0 Other:0> 有一段时间, sniff捕获错误端口的TCP数据包: >>> a=sniff(count=1,filter="tcp and host 192.168.10.55 and port 14010") >>> a <Sniffed: TCP:1 UDP:0 ICMP:0 Other:0> >>> a[0] <Ether dst=00:26:55:cb:3b:10 src=00:22:64:55:c8:89 type=0x800 |<IP version=4L ihl=5L tos=0x10 len=92 id=8683 […]

如何提升Asio的主机名parsing在Linux上的工作? 是否可以使用NSS?

我试图使我的networking应用程序在本地工作(服务器和客户端在同一台计算机上运行),当没有networking连接时。 这似乎“偶尔工作”,但大部分时间我最终: terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::system::system_error> >' what(): Host not found (authoritative) Aborted 我目前使用的代码是: tcp::resolver::query query(host, PORT); tcp::resolver::iterator endpointIterator = resolver.resolve(query); tcp::resolver::iterator end; boost::system::error_code error = boost::asio::error::host_not_found; while(error && endpointIterator != end) { mySocket.close(); mySocket.connect(*endpointIterator++, error); } if(error) throw boost::system::system_error(error); 我敢肯定,我已经把问题缩小到ip :: basic_resolver :: resolve ,但我无法弄清楚如何在Linux上实现,或者我可能想要使用什么。 这似乎是同一个问题。 看来,只是不执行任何查找,只是使用127.0.0.1应该工作,但是当我试图取代查询行 tcp::resolver::query query(host, PORT, […]

in_addr_tstring

我有一个存储在in_addr_t中的IP地址,我想创build这个数据types的string表示,即in_addr_t到10.0.0.1。 我怎样才能做到这一点?

SIGPIPE,破碎的pipe道

我正在使用Linux机器上的epoll的networking程序,我从gdb得到错误信息。 Program received signal SIGPIPE, Broken pipe. [Switching to Thread 0x7ffff609a700 (LWP 19788)] 0x00007ffff7bcdb2d in write () from /lib/libpthread.so.0 (gdb) (gdb) backtrace #0 0x00007ffff7bcdb2d in write () from /lib/libpthread.so.0 #1 0x0000000000416bc8 in WorkHandler::workLoop() () #2 0x0000000000416920 in WorkHandler::runWorkThread(void*) () #3 0x00007ffff7bc6971 in start_thread () from /lib/libpthread.so.0 #4 0x00007ffff718392d in clone () from /lib/libc.so.6 #5 0x0000000000000000 […]

在内核套接字编程中模拟select()和poll()的效果

我正在开发的一个Linux内核驱动程序是在内核中使用networking通信( sock_create() , sock->ops->bind()等)。 问题是会有多个套接字接收数据。 所以我需要在内核空间中模拟select()或poll() 。 由于这些函数使用文件描述符,除非我使用系统调用来创build套接字,否则我不能使用系统调用,但是由于我在内核中工作,这似乎没有必要。 所以我想在我自己的处理程序( custom_sk_data_ready() )中包装默认的sock->sk_data_ready处理程序,这将解锁信号量。 然后,我可以编写我自己的kernel_select()函数,试图locking信号量并进行阻塞,直到它打开。 这样内核函数进入hibernate状态,直到信号量被custom_sk_data_ready()解锁。 一旦kernel_select()获得locking,它将解锁并调用custom_sk_data_ready()来重新locking它。 所以唯一额外的初始化是在绑定套接字之前运行custom_sk_data_ready() ,所以第一次调用custom_select()不会错误地触发。 我看到一个可能的问题。 如果发生多个接收,则多次调用custom_sk_data_ready()将尝试解锁信号量。 所以为了不丢失多个调用并跟踪正在使用的sock ,必须有一个表或指向正在使用的套接字的指针列表。 而custom_sk_data_ready()将不得不在表/列表中标记它传递的套接字。 这种方法听起来吗? 或者,当我使用标准的系统调用时,我应该努力解决用户/内核空间问题? 初始发现: 在中断上下文中调用sock结构中的所有callback函数。 这意味着他们无法入睡。 为了允许主内核线程在就绪套接字列表上hibernate,使用了互斥锁,但是custom_sk_data_ready()必须像互斥锁一样在互斥mutex_trylock()重复(调用mutex_trylock() )。 这也意味着任何dynamic分配都必须使用GFP_ATOMIC标志。 附加可能性: 对于每个打开的套接字,将每个套接字的sk_data_ready()replace为一个自定义的( custom_sk_data_ready() ),并创build一个worker( struct work_struct )和工作队列( struct workqueue_struct )。 一个普通的process_msg()函数将被用于每个worker。 创build一个内核模块级别的全局列表,其中每个列表元素都有一个指向套接字的指针并包含worker结构。 当数据在套接字上准备就绪时, custom_sk_data_ready()将执行并find具有相同套接字的匹配列表元素,然后使用list元素的工作队列和worker调用queue_work() 。 然后process_msg()函数将被调用,并且可以通过struct work_struct *参数(一个地址)的内容find匹配的list元素,或者使用container_of()macros来获取包含该列表结构的地址工人结构。 哪种技术最有声音?

python获取上传/下载速度

我想监视我的电脑上传和下载速度。 一个名叫conky的程序已经在conky conf中做了以下的工作: Connection quality: $alignr ${wireless_link_qual_perc wlan0}% ${downspeedgraph wlan0} DLS:${downspeed wlan0} kb/s $alignr total: ${totaldown wlan0} 当我浏览时,它几乎可以实时显示我的速度。 我想能够使用python访问相同的信息。

你如何改变C ++的IP地址?

我需要在C ++中做一些与networking有关的事情,我通常会在Linux中使用ifconfig做,但是我想这样做而不parsing一组系统调用的输出。 可以使用哪些C或C ++库来判断networking适配器是启动还是closures,读取或更改适配器的IP地址和networking掩码,并更改默认的DNS网关?