| .\" Copyright (c) 1994, 1996, 1997 |
| .\" The Regents of the University of California. All rights reserved. |
| .\" |
| .\" Redistribution and use in source and binary forms, with or without |
| .\" modification, are permitted provided that: (1) source code distributions |
| .\" retain the above copyright notice and this paragraph in its entirety, (2) |
| .\" distributions including binary code include the above copyright notice and |
| .\" this paragraph in its entirety in the documentation or other materials |
| .\" provided with the distribution, and (3) all advertising materials mentioning |
| .\" features or use of this software display the following acknowledgement: |
| .\" ``This product includes software developed by the University of California, |
| .\" Lawrence Berkeley Laboratory and its contributors.'' Neither the name of |
| .\" the University nor the names of its contributors may be used to endorse |
| .\" or promote products derived from this software without specific prior |
| .\" written permission. |
| .\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED |
| .\" WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF |
| .\" MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. |
| .\" |
| .TH PCAP_INJECT 3PCAP "5 April 2008" |
| .SH NAME |
| pcap_inject, pcap_sendpacket \- transmit a packet |
| .SH SYNOPSIS |
| .nf |
| .ft B |
| #include <pcap/pcap.h> |
| .ft |
| .LP |
| .ft B |
| int pcap_inject(pcap_t *p, const void *buf, size_t size); |
| int pcap_sendpacket(pcap_t *p, const u_char *buf, int size); |
| .ft |
| .fi |
| .SH DESCRIPTION |
| .B pcap_inject() |
| sends a raw packet through the network interface; |
| .I buf |
| points to the data of the packet, including the link-layer header, and |
| .I size |
| is the number of bytes in the packet. |
| .PP |
| Note that, even if you successfully open the network interface, you |
| might not have permission to send packets on it, or it might not support |
| sending packets; as |
| .I pcap_open_live() |
| doesn't have a flag to indicate whether to open for capturing, sending, |
| or capturing and sending, you cannot request an open that supports |
| sending and be notified at open time whether sending will be possible. |
| Note also that some devices might not support sending packets. |
| .PP |
| Note that, on some platforms, the link-layer header of the packet that's |
| sent might not be the same as the link-layer header of the packet |
| supplied to |
| .BR pcap_inject() , |
| as the source link-layer address, if the header contains such an |
| address, might be changed to be the address assigned to the interface on |
| which the packet it sent, if the platform doesn't support sending |
| completely raw and unchanged packets. Even worse, some drivers on some |
| platforms might change the link-layer type field to whatever value |
| libpcap used when attaching to the device, even on platforms that |
| .I do |
| nominally support sending completely raw and unchanged packets. |
| .PP |
| .B pcap_sendpacket() |
| is like |
| .BR pcap_inject() , |
| but it returns 0 on success, rather than returning the number of bytes |
| written. |
| .RB ( pcap_inject() |
| comes from OpenBSD; |
| .B pcap_sendpacket() |
| comes from WinPcap. Both are provided for compatibility.) |
| .SH RETURN VALUE |
| .B pcap_inject() |
| returns the number of bytes written on success and \-1 on failure. |
| .PP |
| .B pcap_sendpacket() |
| returns 0 on success and \-1 on failure. |
| .PP |
| If \-1 is returned, |
| .B pcap_geterr() |
| or |
| .B pcap_perror() |
| may be called with |
| .I p |
| as an argument to fetch or display the error text. |
| .SH SEE ALSO |
| pcap(3PCAP), pcap_geterr(3PCAP) |