UNIX网络编程_第1页
UNIX网络编程_第2页
UNIX网络编程_第3页
UNIX网络编程_第4页
UNIX网络编程_第5页
免费预览已结束,剩余9页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、UNIX网络编程(一)配套程序环境配置1 .获取配套程电源码压缩文件碧 unpvl 亮 0国工2008/10/23 0:43 WirRAR418 KB注意:可以在网络上进行下载2 .解压压缩文件J unpvl 3P?018/3/16 16;32 文件夹查看其目录结构ip亦key lib litrfree lib* librOuUmras-tmyi?drnamesncnboeleoolbipinqroutp2015/3/1 & 1632文峰£0)S/3/l& 1&32文件夹2013/3/1S 1S22文碑夹201B/3/1& 15 32文件夹4 Jib

2、1&:3£文件表2018/3/16 1622文件夷201S/3/1G 1632力帙r'OlH/l/lft WTJ文件夹201 &/3/16 1&32文传夫2016/3/16 1G32力斗走2018/5/16 162文心201S/3/15 1632文件关201&/3/1& 1&32文保2D1B/3/16 1S32加恻201B/5/16 16 32文件夹£015/3/16 1532文件夹201B/3/16 1&32文班20U/3/16 1S32文件交£01/3/16 15:3Z文件失刘匡3 .将其复制到u

3、buntu中ppuuntu:-$ cd unpvlSe/ppfcuuntu:/unpvl3e$aclocal.h4conftg.guesEcinfig.h config.h.n ennficj .log corftg.status config.sub cofiftgurc canfIgure.Inlibunp.号Make.definesMake . defines.inMkeftuNikeftie、inREADMEppgubuntu:-/unNUcS 4 .进行配置和编译cd unpv13e ./configure cd lib makecd ./libfree makeDpuburtu;

4、unpviJe/tcpcllservS cd /Hbfree/ppfubuntu; "/impi¥13«/libfree$ nakeget -I.r/lib '9 0? -n_REENTRNT -Wll y -a inet_ntop o int_ntop,c inet_ntop.c: In function 'inet_ntop,:tnet_ntap.c:eo:9: error;己gunent 'stwe' doesn't natch prototype t sl£e;In file inc Luded +oe i

5、inet ntDpxCi2?z 01/usr/trclude/arpd/tnet*h:64:30; error J prototype declarationextern char *lnet_ntnp (tnt _afP con£t void *_restrict cp,Mk心:*h* Lnet ntou ." Error 1注意这时候会出现 size问题,需要进行修改。vim inet_ntop.c / 将第 60 行的 size_t size 改成 socklen_t size; make cd ./libgai make5 .将生成的静态库拷贝到系统库中 cd un

6、pv13esudo cp libunp.a /usr/lib6 .修改unp.h并复制cd unpv13evi lib/unp.h / 4-#include "./config.h" 改成 #include "config.h" sudo cp lib/unp.h /usr/include sudo cp config.h /usr/include7 .编译例程 cd introgcc daytimetcpcli.c -o cli -lunp如果编译成功则配置环境成功注意:gcc -l阵名)是gcc加载静态库的一个选项,包括加载线程库时的-lpthrea

7、d选项也是同样的道理(二)服务器客户端编程学习1 .时间服务例程1>编译源码在 intro/daytimetcpcli.c 和 intro/daytimetcpsrv.c 两个文件中。对其进行编译gcc -o daytimetcpcli daytimetcpcli.c -lunpgcc -o daytimetcpsrv daytimetcpsrv.c -lunp2>运行程序在其中一个控制台运行服务器,再在另一个控制台运行客户端。IP选才i 本机IP./daytimetcpsrvsudo ,/djytinetcpsrv sudo possherd for pp:./

8、daytimetcpclipput>untu1/unpvL3e/intro$ . /cli 127,GhO»1 Fri Mar 16 02:43:49 201ft2 .时间服务例程源码分析服务器源码daytimetcpsrv.c#include "unp.h"#include <time.h> intmain(int argc, char *argv) intlistenfd, connfd; /定义两个套接字描述符,监听描述符和连接描述符struct sockaddr_in servaddr;/服务器网络地址结构,包括 ip和portcharb

9、uffMAXLINE;time_tticks;listenfd = Socket(AF_INET, SOCK_STREAM, 0)获取监听套接字描述符0,通常用于初始化套bzero(&servaddr, sizeof(servaddr);bzero 将目标字节串中的制定字节数目的字节置为 接字地址结构为0servaddr.sin_family = AF_INET; / 服务器地址协议族,定义为网络协议servaddr.sin_addr.s_addr = htonl(INADDR_ANY);servaddr.sin_port= htons(13);/* daytime server */

10、Bind(listenfd, (SA *) &servaddr, sizeof(servaddr);Listen(listenfd, LISTENQ);for ( ; ; ) connfd = Accept(listenfd, (SA *) NULL, NULL);ticks = time(NULL);snprintf(buff, sizeof(buff), "%.24srn", ctime(&ticks);Write(connfd, buff, strlen(buff);Close(connfd);)GD调试学习(一)gdb对时间服务例程的调试1 .编译过

11、程在二进制文件中添加源码信息,方便调试时打印生源码gcc -o daytimetcpsrv -g daytimetcpsrv.c -lunpppubur)lu:*/unpvlgcc - o daytl怕etspv¥ -g daytInetcrv.c -lunp ppubuntv:-/unpvlle/int|2 .使用gdb启动调试程序开始调试gdb daytimetcpsrvppubuntu:-/unpvi3e/lntro& gdb dayttnetcpsrvGNU gdb (Ubuntu T,7*l-Mbuntu5-14*M.N) 7.7.1Spyright (C) Fre

12、« Software Foundationj Inc.License gplvh: gnu cpl version 3 or lawr <httpi/gnu*orq/ltcerkscs/gpl»htnl>Hits Is free soFtware: you are free to change and redistribute It.There is NO WARRANTY, LO the extent perflttLed by law. Type "show copying" mnb ,bshOh w口mntg" for det

13、mtls.This CDO /糜 configured as "x86,4- iSuxfnW.Type show mnFLguraLLon" fo( conTtguraLton details.For bug reporting instructions, please sec:<http:/HWW.gnu .org/sof tvjare/gdb/bug?/5.Find the GDB fianudl and other docunientatton r e&our ces online at 二<http;/hww.gnu<org/softwar

14、e/gdb/docuncntat<on/>.For helpa type "halp".Type "apropos word'1 to search for canfunds related to "xord" Bcadtnq synboXs fron daytimetcpsrv.+donc.(gdb).3.查看进程的源码(list命令)<1>查看10行代码(gdb) l如果按回车,表示重复上一条命令,则会继续输出后10行代码(gdb) 11112 llstenfd - socketCAF_Ntr, sock_占

15、them*. e)j1314 bzerofas«rviddr h siieof(servaddr);15 Fruaddrrstn fantly = af _INET;16 seruaddr rstn_addr*s_addr = htorfladdr_ant);17 servaddr r5tn_pcrt= htons(13); /* dayttne server */IB19Blnd(ll&t?nfd, (SA *) iservaddrstzeafCservaddr);20刖)<2>查看具体行数的代码及其周围的代码(gdb) l数字(gdb) L Jl* (1tnt

16、listenfd, connfd;&struct sockaddr_lnservaddr;9chrbuffMAXLINE;1Gticks;1112 listcnfd * Socket(*F_INET, SOCK.STftEAM, G):1314 bcro(&£ervaddr,式上看orGgrvaddr);15 strvaddr.sin_fdnily 由F_INET;(gdb) |<3>查看上一条l命令显示代码之前的10行代码(gdb) l -(gdb) I z«-AF_IhfT;servaddr. itn addr.s addr hito(nl(

17、lhlADOR AhfV);servddr+i1.n_port=htM$口3)1/* 心server *is19Blcd(llEten". (" *) Sservaddr, stzecf( Ser viddr);(2921LUtcn(Ustcnfd, LrSTENO);24£gdb) 1 -干or (;】)1cnnnfd = A£c&pt(ltstenfd(&A *) MJLl MULIL):main(tnt argc,char *ag+)9IB11tnt struct mr t:iH£ tsocksdcJr idervaddr

18、;burf«AXLIMEiticks;115m4. connfJiILitenfd = iocket(AF_lNETT SCCK_sTftEAfl, 0>bzerof&Hrvflddr, tlznf(serv4ddr);<4>查看一定行数范围内的代码(gdb) l数字1,数字2(gdb) I 8. 24将strict sockaddr_in servaddr;i9cliarbufffnwci.iNE;IBtine tticks;11 12llstenfd = Sacktt(AF INE1, SOEK STREAM F 0);13 14b2ero(is#rva

19、ddrt siit&f(stfrvaddr)jisscrvaddr.stnfamity=afimet;10sertfjiJ(jr»lin_Jddr Ts._ddr-htonl(IKADORMY)J17s«r«ddrnsin_port=htons(12);/*daytine server */IB 198ind(listenfd(SA *) Jts»rvdddrt sizeof(servaddr);2& 21Listen(llsttnfd LISTEN。);之之 23论( ; ;)24conftfd 工 AcCeptfllsteftfdr

20、SA *) HULL, KJLL);(Mb】<5>查看函数名,及其前后 5行代码(gdb) l函数名(gdb)JI wain1#tr)亡 lude*urp.h'+ttnclude<tlne+h>41nt5Fialntlnt drgc,char *jrgv)6(7tnt'Ll-TH. connfd;Bstructscckdddr_in占evadd;9匚h&buffEMAXLINE;10tipe tticks;(gdb)<6>查看该可执行文件所包含调用的相关c文件的指定行数上下5行的代码(gdb) l源文件名:数字(gdb) I Nrap

21、£cck.ciiz / .B* Thss wrap|»r functions also use th# san# prctoiypes as POSlX-lg,9 * which Hqht dtrrer rron Many tnplerefltatt&ns fl.e一 pasix. 19 s(>ectflei10 " the fourth drgunent to getsockcpt() as *void not "char *).11 *12 * If your svsten'are not correct i-e.( the S

22、olaris 2+513 * *sys/socket.hi omits the "consf1 from the second argurent Xa both14 * btnd() and conn&ct()T you'11 get .mrntnqs of the form:15 * earning: psslrg artj 2 or 'bind* discards corst' f ron pointer target type16 *biarntrig! passing arg 2 of connectH dtscard const* frort

23、 pointer targt t type(gdb) <7>查看该可执行文件所包含调用的相关c文件的指定函数名上下 5行的代码(gdb) l源文件名:数字(ydb) I iHrdp&ackciBlnd37return(n);38)p49 4。void41 Hlndtint fd t C43nst struct sockadd r *sa j s ocklen t salen) 4243if (btndffd$a, salen) < a)44eirr_5)f5("bind errcr*);妙 ) 16 (gdb)4.查看调试过程中的其他信息<1>查

24、看变量的当前值(gdb)p变量名(gdb) swrite sysrq.trigger (file=®禺24tl <irq stack_umon+bB2>,buf=SxffffeaSGSdeilcacount=2f ppos=6xe <irq_stack_untan>at drivers/ttv/sysrq.c:10691069return count;(gdb) p count51-2(gdb)格式控制打印(gdb) p /x 变量名(十六进制打印)(gdb) p /x count $4 - 0x2 (gdb) | JLrii -<2>查看地址空间

25、的值(gdb)x地址<3>打印寄存器的值(gdb) p寄存器(gdb) p $bK $3 = 2 (gdb)i m r Bl y j5.设置断点<1>在具体行数设置断点(gdb) break 数字(gdb) br«ak 12Breakpoint 1 at 0x40tb34; file datinetcpsrv*c, line 12.<2>在具体函数名处设置断点(gdb) break 函数名(gdb) bredk BindBreakpoint 2 at &K4Slcd4t file wrapsock.c, line 42.<3>查

26、看当前文件设置所有的断点信息(gdb) info break(Mb) Info breakNumType1breakpoict2breakpoictDi5P Enb Addre5&Uh Atkeep yWxoo目白©B0日QD4。2b34 tn at daytirtepsrv.c:12keep yIn Bind at wrapsock.c:42注意:这里break也可以直接使用 b来替代6.程序的运行<i>让程序从开始运行,直到运行到断点处停止(gdb) r(gdb) rStarting program: /hone/pp/unpvlie/intrD/daytln

27、etcpsrvBreakpoint 1 * main (argc=l f argv=0x7fffffffeG46) at daytinetcpsrvx: 1212listenfd = Socket(AF_INET, SOCK-STREAM.6;在断点处执行rBreakpoint 2, Sindtet40, £3leri=16) it wrapsatk.c :42421£gdb) rThe program being debugged h由w been started already. Start it frtiE the beginning? (y nr n) ,<2

28、>让程序一条一条的向下执行,如果是函数不进入函数(gdb) nBreakpoint 1, riatn (argc-1, argv=Bx7fffffffeOS) at dattnetepsrv.c:12 12itstenfd - socket(AF_iNLT sock.strlam, o);(gdb) n14bzercf&seivaddrt sl£eof(serveddr)j<3>让程序从断点处继续向下运行,直至碰到下一个断点停止(gdb) c(gdb) cContinuing.Breflkpoint ?. Bind (fcJ-3> sa-6x7ffff

29、ff, salen=15) at.c:42Al <<4>让程序执行下一条命令,如果是函数则进入函数(gdb) sBreakpoint 1, Bind (fd=3, sa=0)c7fffffffcf40, salen=16) at wrapsockc:4242(gdb)43if (bind(fd, sar salen)y 0)(gdb) |7.调试过程中间值的输生<1>输出变量值(gdb) p变量名&redkpQint 1, hjin (argc=l drgV=0x7ffffffdt ddytIrtttpirv,c;1212Itstenfd 二 Sceket

30、(AF_INET h SOCk_STRLAMp 0);(gdb) p UBtenfdSi - egdb) .J r- :r d(j J . i. ; I - r ,智城$3 - 2c 三ij 匕)I<2>查看函数堆栈(gdb) bt(gdb) bt#6 natn (angc=largv=0x7fffffffe98) at dayttAetcpsrv.c:168.退由gdb的调试(gdb) q(gdb) qA debugging session is activt.inferior 1 process size will be ktlked.Quit anyway? (y or n)

31、 yppqubuntu; /unpvl3e/lnt.r5三、网络调试命令的学习(一)netstat网络连接查看命令1 .列由当前所有的连接(-a)netstat -a | head -10ppiubuntu /unpvl3e/t(itro$ netstat -ahead-10Active Internet connections (servers andestablished)Proto Recv-Q Send-Q Loczl AddressForetgo AddressStatetcpeo ubuntu:donalnt*LISTENtcp8D locflhost:tpp*LISTENtcp6

32、e0 ip6-locallast:ippI:*LISTENxcpoJ3 lp6TQCalh05t: 4c998tpC-lOCalhQSX;lppCLQSE.WAITu6p00 *:ipp*udp0959653Hr.udpB0 uibuntu-domain*ikudpQ0 *:bootpcw -I就ppubuntui /unfivl3e/intro5 |注意:这里由于显示的内容过于繁多,所以使用 head命令只显示输出前10行,如果想只显示输出后 10行,则使用tail -10命令。2 .列由当前所有的tcp或者udp连接(-t or -u)1列出所有tcp连接ProtoRecv-QSend-Q

33、 Local AddressForeign Addressudp0o *:tpp* * udp0。*:596S3 * * .udpe0 ubuntuidonidtn* * * *udp06 *:bootpc* *udp600 :4174:*ppfiubuntu: unpvlSe/tntroS 1ppubuntu:/urpvi3e/intro$ netstat -auAct!ve Internet connections (servers and established)Statenetstat -atpp(3ubuntd:-/unpvl3e/Inti t>$ netstdt -atAct

34、ive internet connections (servers and estdblLshedProto Recv-QSend -QLocdl Addres5Foreign AddressStatetcp0Gubuntu:domain*;*listentcp0elo8lhgt;tpp* £ *LISTENtcp60etp6 localhost:ippI:*LISTENtcp61eip6 localhost:4699Bip6-localho5t:ippCLOSE_WAITppQubuntu:/unpvl3c/intro$ |2列出所有udp连接netstat -au3 .显示当前连

35、接的ip而不是域名(-n)netstat -an | head -10ppubuntut /unpvlie/tntro$ netstat - an | head -10Active Internet connections (servers and established;ProtoRecv-Qsend-QLucl Add resstcp00:53tcpae177.0.0,1:631tcp6eetcp6i0:1146998udp96040.0.0:631udp0e:59653udpQe153udp000 * 0«0 . 0 : 68p

36、p(gubuntu:*/unpvl3e/lnti。5Foreign Address 0,0,0,0:*1:i* :a.0.e,0:* CH* 削*e.a.0,3i* o.o.o,o:*state LISTENI ISTEN LISTEN CLOSt_WAIT4 .只列由监听中的连接(-1)netstat -1ppcbuntu !-/uripvi3e/tntro$ ret£tat -1 Active Internet connections (ont serversProtoRecv-Q Send-Q Local AddressFor etgnAdd i essStatetepe9 u

37、buntuidonain*LISTENitepe0 localhast;ipp*金11STENtcp6e日 tpfi-localhost:t叩:步LISTENudpe0 *:ipp*itudpe« *:59653*: vdpc0 ubuntu:donain* H8.拿udp60 *!bootpcw ;wudp605 : 1:4174:r*Active UNIX domain sockets (unlyservers)ProtoRefCnt FLmgsTypeStateiPithuni其2ACC STREAMLISTENING14528/tnp/.ICE*unix/lW2untx2AC

38、C JSTREAMLISTENING11003/var/run/acpid.socketunix2;ACC STREAMLISTENING13764/run/user/1000/keyring-l&vvir/controlunxACC STREAMLISTENING1471/run/user/1GO0/keyrtnq 18Wlm/plcc"1Unix2ACC STREAMLISTENING工 4676/run/uscr/1000/keyring' IfiWlm/gpg注意:这里不能使用-a选项,否则系统会将所有连接列出来而不仅仅是监听端口5 .列出监听端口并显示其进程

39、(-p)sudo netstat -nlptppgubuntu;*$ sudo netstat -nipt5udu po与Kwurd For pp:Active Internet connections (only servei s)proto liecv-Q Serid-Q PID/Program nan tepG 91073/dnsnasqtep602754/cjpsdtep60C41»/dayttmetcpsrvLocal Address127.0,1.1153127.0.a,l;631c.0.o.g;i3f-orelgn Address0 ra,e.e:*o.辱e:?754/

40、mpsdstateISTENLISTENLISTENI TSTFNservers)Fqpiqn Addressstate0.0,6.0:*LISTENO.O.G.C:*LISTENa.kO.m*LISTEN:*LISTEN注意:这里要显示进程pid以及进程名,必须使用root权限进行运行,否则root的进程则无法显示pid 以及进程名。netstat -nlptppubuntu:-$ netstat -nipt(Not all processes couLd be td白nttTied, on-owned process lr)fo 用III not be 5h口丹n, you would h

41、ave to be 口口E to see it 曰ll*)Active Internet connections (only Prato Recv-Q 5end-Q Local Address PIDPragran nameppubuntu:-$ )6 .列由监听端口并显示其进程拥有者(-e)sudo netstat -nletppubuntu:sudo netstatnlctActive Inter net connections (only servers)protor&cw-q sendQLocal AddressForeign AddressstateUserIcodetep6

42、0U7.ea.i:53G.B,0.6:*LISTEN012015tepee:631fl . 0 0.6 : *LISTEN62iasatepg0e.e.e.D;i3e.o. 0,0LISTENQ745 7r94tcp&eo:1:6S1:*LISTEN<321087注意:如果这里使用-n选项者显示的是用户ID号而不是用户名称sudo netstat -letppgubuntu:5 cud。 netstat -letActive Internet connections (only servers)PrateRecv-Q Send QLocal AddressFor

43、eign Add ressStateuserInodetep6eubuntu rdOTiainit : LISTENIToot12919tepG0Ipcalhostiipp.LISTENrooc21988tepe6*:datine* - * ,LISTENrQOtN6794ttpC00ipCToalhost ;t叩LISTENroot210B7ppgubuntu:一$ 7.打印由网络中各种数据包的传输情况的统计(-s)netstat -sppubuntu:netstat t M216 rot" packets recclvcd6 htth invalid addresses6 for

44、warded0 inconirtg packets discarded210 tfKOHl的 packets delivered ?17 requms sent cutA cutgoing packets dropped4 dropped bcsufe of missvnq routt lenp;17 tump messages cereled 旧 input TCflP message failtrl. 1CHP Input histoqran:destinatidu unmyhabLe ; 8echo requests: 412 tCNP nesssge-s sent e iCHP mes

45、sages failed ICMP output hiLtograpi: destination unreecliable:电 echo replies: 41 trtpf.ig:InTypel: BInTypeS; 4Outiypef) i 4 OutlypeJt ATcp!dl dctlw connetttcns openLngs mconn中Ctlun upnlng专8 .显示内核路由信息(-r)netstat -rppubuntu:5 netstat Kernel IP rcuttng tableDestinationGatewayCenmaskFlagsWSSWindowirttIf

46、acedefault192.168.15a,2O.O.O.OUG6&0cthO192.160.153,0*U099ethO9 .打印由系统中所有网络接口 (网卡)信息(-i)ppubuntu:netstat *iKernel interface tableIfa« MTU Met RX-OKRX-ERR RX-DRP RK-0VRTX-OK TX-ERR TX-DftP TX-OVR Figethe156o q131O0 a162090 BMRUIpC553« 01 119000 a190sae LRuppubuntu: "$ |注意:如果使用-ei选项,则输出结构和ifconfig命令是一致的netstat -eippubuntu=netstat -eiLKernel interface tableHethfl Link encaplEtherrtet HNaddr 00:Sc;29:5d: 19:H tnet add:工乡2.168,153.132 Beast:152.loft.1S1.255 Mask:2S5.2S5.25S.0 H tnett> 白ddr: fess: :zec:29ff tfeidi397a/M scope:LinkHUP &R0A0CAS7 RUNNING

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论